我需要写一个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))
- 这是我不明白的行。
如果还有其他简单方法,请建议我
答案 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)
除i
,num
也是如此,从而提高您的方法效率。也就是说,您只需循环直到num / i
的平方根,并将对num
和i
添加到num / i
。请注意,如果sum
为方形,则num
的平方根只需添加一次。
请注意,如果您以这种方式计算num
,那么对于完美数字,它的值将为sum
,而不是2 * num
。
答案 2 :(得分:1)
num % i
表示“num modulo i”;它返回数字除法的提示(因此,0
和i-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的值,则数字是完美的,并显示数字!