A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李洋- 中级黑马   /  2013-12-10 23:32  /  1447 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如6=1+2+3.编程 找出1000以内的所有完数。

3 个回复

倒序浏览
本帖最后由 ReFly 于 2013-12-11 00:08 编辑
  1. package day1210;

  2. public class WanshuTest {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                
  9.                 //调用,求1000以内的完数
  10.                 wanshu(1000);
  11.         }
  12.         
  13.         //完数函数体
  14.         static void wanshu(int maxNum){
  15.                 for(int i=1;i<maxNum;i++){
  16.                         int sum=0;
  17.                         for(int j=1;j<i;j++ ){ //这里还可以做优化,j<Math.sqrt(i),可以减少循环次数
  18.                                 
  19.                                 //整除可以判断因子
  20.                                 if(i%j==0) //如果是因子,就跟加到sum上。
  21.                                         sum+=j;
  22.                                 
  23.                         }               
  24.                         //循环结束后就得到因子的和sum了。
  25.                         //因子之和与它本身比,如果相同则输出
  26.                         if(sum==i) System.out.println(i);
  27.                 }        
  28.         }
  29.         
  30.         //完数函数体尾

  31. }
复制代码

回复 使用道具 举报
void wanshu()
{
   int i, j;
  
   j = 1;

   for(i = 3; i < 1000; i++)
   {
      int sum = 0;
          while(j < i)
          {
             if(i % j ==0)
                 sum = sum + j;
                 j++;
          }
          j = 1;
          if(sum == i)
              printf("%d是完数\n", i);

    }
   
}


我把主要的思想用C语言写了写   你能看懂吗?
while循环是为了找出一个数 i 所有的因子,然后将其相加,最后再与 i 比较。    现在准备考研,没多少时间看java  只能用C语言来解答了 抱歉!!!
回复 使用道具 举报
本帖最后由 ReFly 于 2013-12-11 00:32 编辑

同学我还要问你一个问题,请看下面:

8=2*2*2*1

因子之和为1+2+2+2呢,还是1+2+4 呢??

如果是前者,那代码需要修改。

-------------------------刚刚去查了一下,是后者,刚刚写的代码是对的-------------------------------------

百度百科:


例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。第三个完全数是496,有约数1、2、4、8、16、31、62、124、248、496,除去其本身496外,其余9个数相加,1+2+4+8+16+31+62+124+248=496。后面的完全数还有8128、33550336等等。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马