鱼C论坛

 找回密码
 立即注册
查看: 3124|回复: 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);
                        }
        }
}
哪里错了?求大神。。。


最佳答案

查看完整内容

这是你的方法只不过效率低了点
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  20.         return 0;
  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  1. #include<stdio.h>
  2. #include<math.h>

  3. int isWqs(int i);

  4. int main()
  5. {
  6.         int i;
  7.         for(i = 6;i<=1000;i++)//遍历最小的是6
  8.         {
  9.                 if(isWqs(i) == 1)//如果是完数就输出
  10.                 {
  11.                         printf("%d\n",i);
  12.                 }
  13.         }
  14.        
  15.         return 0;
  16. }
  17. int isWqs(int i)
  18. {
  19.         int j,k,t,sum;
  20.         int y[256];
  21.         y[0]=1;
  22.         k = 1;//应为1肯定是因子所以直接加上去了
  23.         sum = 1;//1默认有了
  24.         for(j = 2;j<=sqrt(i);++j)
  25.         {
  26.                 if(i%j==0)//如果能整除 那么 j 和 i/j 都是因子
  27.                 {
  28.                         y[k]=j;
  29.                         k++;
  30.                         y[k]=i/j;
  31.                         k++;
  32.                 }
  33.         }
  34.         t = sqrt(i);
  35.         if(t*t == i)//如果是完全平方数那么最后两个是一样的
  36.         {
  37.                 k=k-2;
  38.         }
  39.         else
  40.         {
  41.                 k--;
  42.         }
  43.         for(j=1;j<=k;++j)//把真因子加起来
  44.         {
  45.                 sum += y[j];
  46.         }
  47.         if(sum == i)//判断真因子之和与原数字
  48.         {
  49.                 return 1;
  50.         }
  51.         else
  52.         {
  53.                 return 0;
  54.         }
  55. }


复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-7 22:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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