質問
完璧な番号を見つけるには、Cプログラムを書く必要があります。
main()
{
int n=1000,sum = 0;
for(int num = 1; num <= n; num++)
{
sum = 0;
for(int i = 1; i < num; i++)
{
if(!(num%i))
{
sum+=i;
}
}
if(sum == num)
printf("\n%d",num);
}
}
if(!(num%i))
- これは私が理解していないd線です。
他の簡単な方法がある場合は、私を提案してください
解決
if(!(num%i))
単に意味します if( (num%i) == 0 )
他のヒント
あなたが完璧な数字を見つけるためのより効率的な方法を探しているなら、あなたは読みたいかもしれません 完璧な数字のウィキペディアページ. 。その中で、あなたは既知の奇妙な完全な数字がないことがわかります(そして、あなたの方法を使用することは何も見つかりません)、そしてすべての完全な数字はフォームのものであることがわかります:
2^(p - 1)*(2^p - 1)
どこ 2^p - 1
したがって、プライムです p
プライムです。したがって、完璧な数字さえも見つけたい場合 2^p - 1
すべての素数のために p
, 、 もしそうなら 2^(p - 1)*(2^p - 1)
完璧です。
シンプルなループを使用していくつかの小さな完璧な数字を見つけたい場合は、その場合に注意することでアプローチをより効率的にすることができます i
分裂します num
, 、そうです num / i
. 。つまり、あなたはの平方根までループアップする必要があります num
ペアを追加します i
と num / i
に sum
. 。 IFに注意してください num
正方形で、平方根です num
一度だけ追加する必要があります。
計算した場合に注意してください sum
このようにして、それは価値になります 2 * num
完璧な数字ではなく num
.
num % i
「num モジュロ i ";それは数字の分割のリマインダーを返します(したがって、間の数字 0
と i-1
).
cでは、0は偽で、他のすべての数値が真であるため、 !(num % i)
「num modulo I」がゼロの場合、またはnumがiによって均等に分裂できる場合は、単純な数学音であるかどうかをテストします。
非常に簡単な方法で、 if(!(num%i))
コードは、numの値がiによって分割され、残りが0の場合に戻るかどうかをチェックします...したがって、ここでは弾性演算子%が残りを見つけるために使用されます。 if(num % i==0)
。それがtrueを返す場合、私の値は合計で追加する必要があります。最後に、合計の値がnumの値に等しい場合、数は完全で、数は表示されます!