| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1005 人关注过本帖
标题:新人求助.....
只看楼主 加入收藏
王者自谦1992
Rank: 2
等 级:论坛游民
帖 子:57
专家分:74
注 册:2011-4-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
新人求助.....
这个是一道题,我思考了很长时间,有鸭梨.....现问题如下,求解啊:
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是完数
编程序找出1000以内的所有完数,并按下面格式输出其因子:
6 its factors are 1,2,3
问题:
1,为什么说1000以内的最多只有十个因子?求解答,最好给个证明.....
2,最后放因子的那个数据怎么解决?求解答
一下是我自己编的一个程序,求解答:

# include <stdio.h>
int main()
{int i;
    for(i=1;i<=1000;i++)
    {
        int j=1,sum=0,m;
        
            while(j<i)
            {
                if(j/i==0) m=j/i;
                sum=sum+m;
                j++;
            }
            if(sum==i) printf("%d its factors",sum);
        }
        return 0;
    }
搜索更多相关主题的帖子: 时间 
2011-04-19 23:22
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:20 
程序代码:
#include <stdio.h>

int is_perfect_p(int n, int f[]) {
    int i, j = 1, sf = 1;
    f[0] = 0;
    for (i = 2; i * i < n; i++) {
        if (n % i == 0) {
            f[j++] = i;
            f[j++] = n / i;
            sf += i + f[j - 1];
        }
    }
    if (i * i == n) {
        sf += i;
        f[j++] = i;
    }
    f[0] = j;
    return sf == n;
}

int sort(int a[]) {
    int i, j, k;
    for (i = 1; i < a[0]; i++) {
        for (j = i + 1; j < a[0]; j++) {
            if (a[j] < a[i]) {
                k = a[i];
                a[i] = a[j];
                a[j] = k;
            }
        }
    }
    return 0;
}

int factors[20] = {0};    // 有件事我很不解。如果把这个定义放在 main() 函数里,就会死循环。大家试一下在你们的机器上会不会这样。
                                   // 已经明白了,原来是数组越界。感谢 孔明 的指点

int main() {
    int i, j;
    for (i = 6; i <= 1000; i++) {
        if (is_perfect_p(i, factors)) {
            sort(factors);
            printf("%d its factors are 1,", i);
            for (j = 1; j < factors[0] - 1; j++) {
                printf("%d,", factors[j]);
            }
            printf("%d\n", factors[j]);
        }
        //printf("%d\n", i);
    }
    return 0;
}


[ 本帖最后由 voidx 于 2011-4-22 20:58 编辑 ]
2011-04-20 00:54
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
程序代码:
#include<stdio.h>
void main()
{
  int n,i,j;
  int sum;

 
  for(n=2;n<=1000;i++)
   {
      sum=0;
      for(i=1;i<n;i++)
       {
          if(n%i==0)
          sum+=i;
       }
      if(sum==n)
      {
       printf(" %d its factors are ",n);
       for(j=1;j<n;j++)
        {
          if(n%j==0)
          printf("%d ",j);
        }
       printf("\n");
     }
}


[ 本帖最后由 qq1023569223 于 2011-4-20 07:15 编辑 ]

   唯实惟新 至诚致志
2011-04-20 06:54
帅的让人抽
Rank: 4
来 自:安徽
等 级:业余侠客
帖 子:94
专家分:224
注 册:2010-9-30
收藏
得分:0 
你写的好像有问题啊啊
程序代码:
#include <stdio.h>
int main()
{
  //local  declarations    
 int i;

 int j;

 int sum;

   //statements
  for(i=2;i<=1000;i++)
  {sum=0;
   for(j=1;j<i;j++)
        if(i%j==0)   sum=sum+j;
    if(sum==i)   
    {
        printf("%d,its factors are ",i);
        for(j=1;j<i;j++)
            if(i%j==0)     printf("%6d",j);
        printf("\n");
    }   //if    
        
  }    //for    
 return 0;
}  //main

我重写了一个……

樱花下落的速度依然是秒速五厘米,即使发了一千次短信,
心与心之间也只能靠近一厘米……
2011-04-20 07:09
xjzxylj
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:113
注 册:2011-4-18
收藏
得分:0 
楼上的大哥,还有个条件原数要等于因子之和,你少了这个了,3楼对的。

淫一手湿,简单;难的是,淫一被子湿。(富有诗意,此处抄袭)
2011-04-20 08:00
xjzxylj
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:113
注 册:2011-4-18
收藏
得分:0 
void main()
{
  int i,j,m;
  for(i=2;i<=1000;i++)  //从0到1000的数
  {
      m=0;
      for(j=1;j<i;j++) //可能的因子
      {
          if(i%j==0)   //判断是否因子
          {
              m+=j;   //对因子求和
              if(m==i)   //判断是否完数
              {
                  printf("%d\n",i);
                  printf("%s\n"," its factors are "); //输出“完数的因子是”
                 
            for(j=1;j<i;j++)   
            if(i%j==0)   
                printf("%4d\n",j);    //输出因子
              }
          }

      }
  }
    return ;
}
思路和三四楼的一样的。给你发个详细解释版的,呵呵。也是自己练手滴。

淫一手湿,简单;难的是,淫一被子湿。(富有诗意,此处抄袭)
2011-04-20 08:56
xjzxylj
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:113
注 册:2011-4-18
收藏
得分:0 
四楼的大哥,你的码刚没看仔细,没看到你的求和验证,发错话了,在这里道个歉。

淫一手湿,简单;难的是,淫一被子湿。(富有诗意,此处抄袭)
2011-04-20 08:58
xjzxylj
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:113
注 册:2011-4-18
收藏
得分:0 
if(j/i==0) m=j/i,楼主码里用WHILE循环的,没多看,这条就出错了,应该是模吧。

淫一手湿,简单;难的是,淫一被子湿。(富有诗意,此处抄袭)
2011-04-20 09:02
帅的让人抽
Rank: 4
来 自:安徽
等 级:业余侠客
帖 子:94
专家分:224
注 册:2010-9-30
收藏
得分:0 
回复 7楼 xjzxylj
小姐。可好……

樱花下落的速度依然是秒速五厘米,即使发了一千次短信,
心与心之间也只能靠近一厘米……
2011-04-20 09:03
xjzxylj
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:113
注 册:2011-4-18
收藏
得分:0 
我擦, 偶可是爷们。

淫一手湿,简单;难的是,淫一被子湿。(富有诗意,此处抄袭)
2011-04-20 09:06
快速回复:新人求助.....
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018816 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved