5

完全数を見つけるために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ラインです。

他に簡単な方法があれば教えてください

4

4 に答える 4

3

if(!(num%i))単に意味しますif( (num%i) == 0 )

于 2010-12-29T13:09:26.567 に答える
3

完全数を見つけるためのより効率的な方法を探している場合は、完全数に関するWikipediaページを読むことをお勧めします。その中には、既知の奇数の完全数がなく(そして、あなたの方法を使用しても、何も見つからない)、すべての偶数の完全数は次の形式であることがわかります。

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ペアinum / iを追加するだけで済みますsumnumが正方形の場合、の平方根はnum1回だけ追加する必要があることに注意してください。

sumこの方法で計算すると、その値は2 * num完全数ではなく、完全数になることに注意してくださいnum

于 2010-12-29T13:19:52.680 に答える
1

num % i「 nモジュロi」を意味します。0数値の除算のリマインダーを返します(したがって、との間の数値i-1)。

Cでは、0は偽であり、他のすべての数値は真であるため!(num % i)、「num modulo i」がゼロであるかどうかをテストします。または、単純な数学では、numがiで割り切れる場合にテストします。

于 2010-12-29T13:09:08.317 に答える
0

非常に簡単な方法で、if(!(num%i))コードはnumの値をiで割った場合にチェックし、余りが0かどうかを返します...したがって、ここではモジュラス演算子%を使用して余りを見つけます。このコードは次のとおりです。に似ていif(num % i==0)ます。trueを返す場合は、iの値に合計を加算する必要があります。最後に、sumの値がnumの値と等しい場合、数値は完全であり、数値が表示されます。

于 2011-12-08T14:36:39.160 に答える