2016-09-19 1 views
-6
public class PrimeNumbers { 
public static void main(String[] args) { 
     int i = 1000000000; 
     int m=2; 
     int n=1; 
     for (int j = 2; j < i; j++) { 
      int l=0; 
      if(j%25==0) 
      { 
       if(j%100==0) 
       { 
        m++; 
       } 
       if(j%1000==0) 
       { 
        m++; 
       } 
       m++; 
      } 
      if (j % 2 != 0) { 
       for (int k = 2; k < j/m; k++) { 
        if (j % k == 0) { 
         l++; 
        } 
       } 
       if (l < 1) { 
        n++; 
       } 
       if(n==1001) 
       { 
        System.out.print(j); 
       } 
      } 
     } 
    } 

}Prime Numbers: Что плохого в моем коде Он отлично работает до ИНТ пределов, как я иду в течение длительного кода занимает много времени

Он отлично работает для чисел до ~ 100 миллионов, но, как Я собираюсь для больших чисел, результат несовместим. Я видел алгоритмы для простых чисел, просто думал попробовать. Спасибо.

+2

Что такое код _supposed_, и что он на самом деле делает. «не работает» не является приемлемым объяснением. Пожалуйста, посетите [help] и прочитайте [ask], чтобы узнать, как эффективно использовать этот сайт. –

+0

Что это за письма? Это соглашение использовать имена, которые являются описательными. – ifly6

+0

Вы должны перейти на http://cs.stackexchange.com/. Они разбирают математические алгоритмы. –

ответ

2

ИНТ ограничены, чтобы представлять цифры ок. 2,1 миллиарда. Прошлое, что целое число начнет обертываться. Используйте вместо этого тип данных long, и вы сможете пойти намного выше.

0

Я не знаю, что вы пытаетесь сделать точно, но то, что я судить вы хотите, чтобы определить простые числа до числа указанного вами ... если это то, что вам нужно, вот код:

public class PrimeNumbers { 
public static void main(String[] args) { 
     int number = 20000; 
     int i = 1; 
     int j = 0; 
     while (i <= number) { 
      j = 1; 
      int counter = 0; 
      while (j <= i){ 
       int divide = i/j; 
       if (i % j == 0){ 
        counter++; 
       } 
       j++;     
      } 
      if (counter <= 2) { 
       System.out.print(i + " "); 
      } 
      i++; 
     } 
    } 
}