2016-03-04 2 views
0

Это мини-вызов из учебника Java. Следующий код можно сделать более эффективным (путем сокращения числа итераций внутреннего цикла, вероятно, с помощью инструкции continue).Сокращение числа итераций внутреннего цикла в Java для эффективности

/* 
    Use nested loops to find factors of numbers 
    between 2 and 100. 

    In the program, the outer loop runs i from 2 through 100. The inner loop successively tests 
    all numbers from 2 up to i, printing those that evenly divide i. 

*/ 

class FindFactors { 
    public static void main (String args[]) { 

     for (int i = 2; i <= 100; i++) { 
      System.out.print("Factors of " + i + ": "); 
      for (int j = 2; j < i; j++) 
       if ((i%j) == 0) System.out.print(j + " "); 


      System.out.println(); 
     } 
    } 
} 

Однако я стараюсь «упростить», просто добавляет больше шагов. Есть идеи?

+0

чек, чтобы увидеть, если J меньше, что я/2 во все дни вы никогда не будете иметь фактор, превышающий половину i –

+0

, вы также можете вычислить его противоположный коэффициент, а затем вы можете сделать предел квадратом i –

ответ

4

Во внутреннем цикле теста не все номера до i. Достаточно, если вы только проверить до половины я

for (int j = 2; j <= i/2; j++) 
+3

, наибольший коэффициент равен или меньше половины i – Eritrean

+0

. Вы можете ограничить цикл далее факторами, меньшими или равными на 'sqrt (i)', если вы вытащите больший коэффициент, если найдете меньший коэффициент. – bradimus

0
for (int j = 2; j < i; j++) 

Не пытаясь испортить его, рассмотрим натуральное число N, для которого вы бы рассчитать факторы. Возможно, вы могли бы уменьшить количество номеров, которые вы должны проверить?

Просмотрите целые числа факторинга для получения дополнительной информации/разных алгоритмов.

0

Установите длину внутреннего контура на площади индекса от внешнего контура Каждый номер максимальный коэффициент его его площадь

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