2013-02-28 5 views
-1

Я работаю над приложением, которое должно отображать самый большой коэффициент числа, и это должно быть простое число.Как получить последнее число из цикла

Это мое приложение:

public class BiggestFactor { 

public static void main(String[] args) { 

    double dev = 0d; 
    for (double j = 0; j < 984654354654d; j++) { 

     if (984654354654d % j == 0) { 
      dev = j; 
     } 

     // show dev when is a prime number 
     double i; 
     for (i = 2; i < dev; i++) { 

      double n; 
      n = dev % i; 

      if (n == 0) { 
       // do nothing - not a prime number 
       break; 
      } 
     } 
     if (i == dev) { 
      System.out.println(dev); 
     } 
    } 
} 
} 

и мой вопрос заключается в том, чтобы получить в результате только последний номер? В моем случае я получаю кучу чисел.

+1

Как насчет начала цикла с конца и печати первого номера? – Shivam

ответ

3

минимальное изменение объявить новую переменную result:

double result = -1; 

и вместо печати dev, просто сохранить его значение в result:

 if (i == dev) { 
      result = dev; 
     } 

Затем, в конце функция, печать result:

System.out.println(result): 
+0

спасибо большое;) – knowbody

+0

кстати, что самый эффективный способ рассчитать это? – knowbody

+1

@knowbody: Нет, это определенно, определенно нет. Вы должны хранить '984654354654d' в переменной - например,' x' - и всякий раз, когда вы находите фактор, вы должны разделить 'x' на этот коэффициент и повторить тот же фактор. В дополнение к тому, чтобы вы могли быстрее прекратить работу (уменьшив 'x'), это также позволит вам исключить тест для простоты' j', потому что он неявный в алгоритме. Кроме того, вы можете завершить работу сразу же после j * j> x', так как в этой точке единственным оставшимся простым фактором является 'x' (именно это вы хотите напечатать). – ruakh

1
public class BiggestFactor 
{ 
    public static void main(String[] args) 
    { 
     double dev = 0d; 
     double last = dev; 
     for (double j = 0; j < 984654354654d; j++) 
     { 
      if (984654354654d % j == 0) 
      { 
       dev = j; 
      } 
      double i; 
      for (i = 2; i < dev; i++) 
      { 
       double n; 
       n = dev % i; 
       if (n == 0) 
       { 
        break; 
       } 
      } 
      if (i == dev) 
      { 
       last = dev; 
      } 
     } 
     System.out.println(last); 
    } 
} 
+0

thank u, который тоже работает – knowbody

0

Я сделал небольшой рефакторинг и переместил логику проверки правильности в другой функции для лучшего понимания. Кроме того, измените число на 1001, чтобы увеличить скорость проверки: P

public class BiggestPrimeFactor { 

    public static void main(String[] args) { 

     double dev = 0d; 

     double numberToCheck = 1001d; 

     for (double j = 0; j <= numberToCheck/2; j++) { 

      if (numberToCheck % j == 0 && isPrime(j)) { 

       dev = j; 

      } 
     } 

     System.out.println(dev); 
    } 

    private static boolean isPrime(double n) { 
     boolean prime = true; 

     for (long i = 2; i <= n/2; i += 2) { 

      if (n % i == 0) { 

       prime = false; 
       break; 

      } 
     } 

     return prime; 
    } 
} 

В принципе, то, что делает это постоянно обновлять dev быть в настоящее время самым большим основным фактором.

+1

, будет работать для 'numberToCheck = 1006d;'? Что он будет печатать? –

+0

@WillNess Спасибо, что поймали эту ошибку. Обновлен код. – Ankit

+0

хорошо; теперь запустите его за исходное огромное количество менее чем за 0,1 секунды, изменив алгоритм, как объяснено в комментариях к ответу Руаха. :) –

Смежные вопросы