編集問題は、n*(n+1)/2 パターンに従う 1,3,6,10,15 のような数値の除数を見つけることでした。答えがわかりました、ありがとう
私は、経験豊富なプログラマーによる次のコード スニペットを試していました。
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;
}
上記の部分は理解できました。最初の部分が理解できません。
答えの1つが言ったように、反復は次のようになります。
NumberOfDivisors(0)
0 += 1
NumberOfDivisors(1)
1 += 2
NumberOfDivisors(3)
3 += 3
NumberOfDivisors(6)
等
なぜ彼は2、4、5などを排除したのですか???