我正在通過MathBlog上的項目歐拉問題12的解決方案閱讀,我有一些麻煩理解代碼背後的邏輯。該程序使用素數因子分解來查找三角形數的除數。項目歐拉12:與500個因子的三角形數
private int PrimeFactorisationNoD(int number, int[] primelist) {
int nod = 1;
int exponent;
int remain = number;
for (int i = 0; i < primelist.Length; i++) {
// In case there is a remainder this is a prime factor as well
// The exponent of that factor is 1
if (**primelist[i] * primelist[i] > number**) {
return nod * 2;
}
exponent = 1;
while (remain % primelist[i] == 0) {
exponent++;
remain = remain/primelist[i];
}
nod *= exponent;
//If there is no remainder, return the count
if (remain == 1) {
return nod;
}
}
return nod;
}
我瞭解程序的大部分內容,除了高亮顯示的部分「primelist [i] * primelist [i]> number」。我無法理解這行代碼的必要性。我將用一個例子來說明我的觀點。假設我有一個數字510 = 2 * 3 * 5 * 17。突出顯示的代碼只有在Primelist編號爲23時才爲真。但是當列表到達編號17時,條件保持== 1將爲真,程序將退出循環。如果我將代碼更改爲if(remaining == primelist [i])會更好嗎,因爲循環會在primelist變爲17而不是21時結束?