C中的完美数字

时间:2010-12-29 13:06:00

标签: c perfect-numbers

我需要写一个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)) - 这是我不明白的行。

如果还有其他简单方法,请建议我

4 个答案:

答案 0 :(得分:3)

if(!(num%i))仅表示if( (num%i) == 0 )

答案 1 :(得分:3)

如果您正在寻找一种更有效的方法来查找完美数字,您可能需要阅读Wikipedia page on perfect numbers。在它里面你会发现没有已知的奇数完美数字(并且使用你的方法你不会找到任何数字)并且所有甚至完美的数字都是以下形式:

2^(p - 1)*(2^p - 1)其中2^p - 1是素数,因此p是素数。因此,如果您想查找完美数字,请检查所有素数2^p - 1的{​​{1}}的素数,如果是p则完美。

如果您只是想使用一个简单的循环找到一些小的完美数字,您可以通过注意2^(p - 1)*(2^p - 1)inum也是如此,从而提高您的方法效率。也就是说,您只需循环直到num / i的平方根,并将对numi添加到num / i。请注意,如果sum为方形,则num的平方根只需添加一次。

请注意,如果您以这种方式计算num,那么对于完美数字,它的值将为sum,而不是2 * num

答案 2 :(得分:1)

num % i表示“num modulo i”;它返回数字除法的提示(因此,0i-1之间的数字。)

在C中,0为假,所有其他数字都为真,因此!(num % i)测试“num modulo i”是否为零,或者以简单的数学方式说,如果num可以被i整除。

答案 3 :(得分:0)

以非常简单的方式,if(!(num%i))代码检查如果num的值除以i并且如果余数为0则返回...因此,此处使用模数运算符%来查找其余..这段代码类似于if(num % i==0)。 如果它返回true,那么i的值应该加上sum。最后,如果sum的值等于num的值,则数字是完美的,并显示数字!