鱼C论坛

 找回密码
 立即注册
查看: 2549|回复: 3

求1000以内的所有完数

[复制链接]
发表于 2014-2-5 20:16:30 | 显示全部楼层 |阅读模式
10鱼币
#include<stdio.h>
void main()
{
        int n,i,s=0;
        for(n=2;n<1000;n++)
        {
                for(i=1;i<n;i++)
                        if(n%i==0)
                                s=s+i;
                        if(s==n)
                        {
                                printf("%d=",n);
                                for(i=1;i<n;i++)
                                        if(n%i==0)
                                                printf("%d+",i);
                        }
        }
}
哪里错了?求大神。。。


最佳答案

查看完整内容

这是你的方法只不过效率低了点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-5 20:16:31 | 显示全部楼层
这是你的方法只不过效率低了点
#include<stdio.h>
int main()
{
        int i,j,s=0;
        for(i = 6;i<=1000;++i)
        {
                for(j = 1;j<i;++j)
                {
                        if(i%j==0)
                        {
                                s+=j;
                        }
                }
                if(s==i)
                {
                        printf("%d\n",i);
                }
                s=0;
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-5 21:16:31 | 显示全部楼层
本帖最后由 牡丹花下死做鬼 于 2014-2-5 21:42 编辑
#include<stdio.h>
#include<math.h>

int isWqs(int i);

int main()
{
        int i;
        for(i = 6;i<=1000;i++)//遍历最小的是6
        {
                if(isWqs(i) == 1)//如果是完数就输出
                {
                        printf("%d\n",i);
                }
        }
        
        return 0;
}
int isWqs(int i)
{
        int j,k,t,sum;
        int y[256];
        y[0]=1;
        k = 1;//应为1肯定是因子所以直接加上去了
        sum = 1;//1默认有了
        for(j = 2;j<=sqrt(i);++j)
        {
                if(i%j==0)//如果能整除 那么 j 和 i/j 都是因子
                {
                        y[k]=j;
                        k++;
                        y[k]=i/j;
                        k++;
                }
        }
        t = sqrt(i);
        if(t*t == i)//如果是完全平方数那么最后两个是一样的
        {
                k=k-2;
        }
        else
        {
                k--;
        }
        for(j=1;j<=k;++j)//把真因子加起来
        {
                sum += y[j];
        }
        if(sum == i)//判断真因子之和与原数字
        {
                return 1;
        }
        else
        {
                return 0;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-5 21:20:59 | 显示全部楼层
那个验证是不是完数 你也可以简单点但效率低点就像你一个一个试过去
不过你忘了一件事每次加完一个数的因子后 要写 s=0; 你漏了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 02:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表