2016-05-11 4 views
0

Я видел много написания факторизационных логик как этот
1. начиная с = 2
2. С помощью я * я < = числа условия цикламетод factorization- логики

for(int i = 2; i*i <= number; i++){ 
if(number % i == 0) 
    // some code 
} 

Я сомневаюсь, что: что нужно использовать i * i < = номер. Что он оптимизирует?

ответ

0

Факторы числа спарены. Например, число 30 имеет факторы 1, 2, 3, 5, 6, 10, 15 и 30:

1 2 3 5 
| | | | 
30 15 10 6 

Так что вам не нужно, чтобы рассчитать все факторы, только первая половина из них, и получить вторую половину простой операцией деления.

Связанный вопрос: Efficiently getting all divisors of a given number.

+0

+1 Итак, мы можем устранить все остальные делители (пар факторов), используя только upto sqrt (number). В некоторых случаях n остается простым числом. Пример 58. Мы повторяем только до 7, теперь число равно 29, выходы цикла. Если число остается еще больше 1 (после 29> 1 здесь) после выхода цикла. Мы должны позаботиться об этом количестве, которое ДОЛЖНО БЫТЬ ПРЕМЬЕР. – Sparrow