方法

2016-05-11 39 views
0

我看到許多寫入因式分解邏輯這樣
1.使用I = 2
2.起始I * I < =數
條件循環方法

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

我的疑問是: 使用i * i的需要是什麼< =數字。他在優化什麼?

回答

0

數字的因素是成對的。例如,數30具有因素12356101530

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