Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的完全数_C_Perfect Numbers - Fatal编程技术网

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; } }

我需要写一个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);
    }
}
main()
{
int n=1000,和=0;

对于(int num=1;num
num%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,请参阅此处了解更多信息,并注意你的程序将要花很长很长的时间来跑,但是如果你想要的是前十几个左右的完美数字,你就要跑。