2012-09-16 79 views
0

編輯問題是發現數字的因子,如1,3,6,10,15其次n *(n + 1)/ 2模式。我得到了答案,謝謝邏輯背後的數字代碼

我正在經歷一段經驗豐富的程序員以下代碼片段。

int number = 0; 
int i = 1; 

while(NumberOfDivisors(number) < 500){ 
    number += i; 
    i++; 

我試了很多,但我不明白以下部分代碼。

number += i; 
i++; 

爲什麼他不只是增加數字本身?如果他使用相同的代碼,在執行過程中不會丟失一些數字嗎?它背後的邏輯是什麼?

下面是代碼

private int NumberOfDivisors(int number) { 
    int nod = 0; 
    int sqrt = (int) Math.Sqrt(number); 

    for(int i = 1; i<= sqrt; i++){ 
     if(number % i == 0){ 
      nod += 2; 
     } 
    } 
    //Correction if the number is a perfect square 
    if (sqrt * sqrt == number) { 
     nod--; 
    } 

    return nod; 
} 

的其餘部分我理解上述部分。無法理解第一部分。

作爲答案的人說 迭代應該是這樣的:

NumberOfDivisors(0) 
    0 += 1 
NumberOfDivisors(1) 
    1 += 2 
NumberOfDivisors(3) 
    3 += 3 
NumberOfDivisors(6) 

他爲什麼要消除2,4,5等???

+0

目前尚不清楚,從這個代碼他爲什麼這樣做 - 你必須提供更多的代碼或告訴程序做什麼。 – Abraham

+0

實際應該做的代碼是什麼? NumberOfDivisors的實現是什麼? – phant0m

+1

似乎是至少有500個因子得到第一個數n(n + 1)/ 2的循環......但是對於什麼?那麼代碼的結尾可能會給我們一個提示 – Kwariz

回答

2

原始作者是這麼解決這個問題的:Triangle number with 500 divisors。按照鏈接獲得解釋,您發佈的代碼,甚至有...

The sequence of triangle numbers is generated by adding the natural numbers. 
So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. 
The first ten terms would be: 
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, … 
Let us list the factors of the first seven triangle numbers: 
1: 1 
3: 1,3 
6: 1,2,3,6 
10: 1,2,5,10 
15: 1,3,5,15 
21: 1,3,7,21 
28: 1,2,4,7,14,28 
We can see that 28 is the first triangle number to have over five divisors. 
What is the value of the first triangle number to have over five hundred divisors? 
+0

非常感謝。我從代碼中提取的地方沒有正確提到這個問題。現在我懂了 :) – House

1

他不只是增加它。他加我每次都會變得更大。

+= 1; 
+= 2; 
etc. 
1

迭代應該是這樣的:

NumberOfDivisors(0) 
    0 += 1 
NumberOfDivisors(1) 
    1 += 2 
NumberOfDivisors(3) 
    3 += 3 
NumberOfDivisors(6) 

+0

他爲什麼消除2,4,5? – House

+0

我真的不能說,你給了零碎的代碼,你可以給整個代碼? –

0

這是某種啓發,因爲除數的數量增長非線性,最好是檢查號碼非線性順序。我不知道它是如何連接到approximate growth rate,可能它只是作者的隨機選擇。