我需要编写一个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线。

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

有帮助吗?

解决方案

if(!(num%i)) 只是意味着 if( (num%i) == 0 )

其他提示

如果您正在寻找一种更有效的方法来查找完美的数字,则可能需要阅读 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 / isum. 。请注意,如果 num 是正方形的,是平方根 num 必须只添加一次。

请注意,如果计算 sum 这样,它的价值将是 2 * num 对于完美的数字,不是 num.

num % i 意思是“ num Modulo 我“;它返回了数字划分的提醒(因此, 0i-1).

在C中,0是错误的,所有其他数字都是正确的,所以 !(num % i) 测试“ num modulo i”是否为零,或者在普通的数学演讲中进行测试,如果i均等i,则i。

以非常简单的方式, if(!(num%i)) 代码检查如果num的值除以i的值,并且剩余的0是否为0 ...因此,在此使用模量运算符%来查找其余部分。.此代码类似于 if(num % i==0)。如果返回true,则应添加i的值。最后,如果总和值等于NUM的值,则数字是完美的,并且显示数字!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top