C中的完全数
我需要写一个C程序来寻找完美数C中的完全数,c,perfect-numbers,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; } }
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);
}
}
main()
{
int n=1000,和=0;
对于(int num=1;numnum%i
表示“num i”;它返回数字除法的提示(因此,是介于0
和i-1
之间的数字)
在C语言中,0是假的,所有其他数字都是真的,所以!(num%i)
测试“num modulo i”是否为零,或者在简单的数学语言中,如果num可以被i整除。如果(!(num%i))
仅仅意味着如果((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
加到和中
。请注意,如果num
为平方,则num
的平方根只需添加一次
请注意,如果以这种方式计算sum
,则对于完全数,它的值将是2*num
,而不是num
,if(!(num%i))
code检查num的值是否除以i,它返回余数是否为0……因此这里使用模数运算符%来查找余数。这段代码类似于if(num%i==0)
。
如果返回true,则应将i的值与sum相加。最后,如果sum的值等于num的值,则该数字是完美的,并且显示该数字!%运算符用于将左侧除以右侧的余数1%3=1;2%3=2;3%3=0;4%3=1;5%3=2;6%3=0;什么是完美数字?42
? :)你写了你不懂的代码?为什么?你把它读成如果不是num/i的余数
@Felix:一个数是它的除数之和,而且,作为一种风格,只需像ykatchou那样写出来就行了。清晰度值得额外输入5个左右的字符。@Harish,请参阅此处了解更多信息,并注意你的程序将要花很长很长的时间来跑,但是如果你想要的是前十几个左右的完美数字,你就要跑。