黑马程序员技术交流社区
标题:
思考题,请帮我分析一下
[打印本页]
作者:
李洋-
时间:
2013-12-10 23:32
标题:
思考题,请帮我分析一下
题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如6=1+2+3.编程 找出1000以内的所有完数。
作者:
ReFly
时间:
2013-12-11 00:01
本帖最后由 ReFly 于 2013-12-11 00:08 编辑
package day1210;
public class WanshuTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//调用,求1000以内的完数
wanshu(1000);
}
//完数函数体
static void wanshu(int maxNum){
for(int i=1;i<maxNum;i++){
int sum=0;
for(int j=1;j<i;j++ ){ //这里还可以做优化,j<Math.sqrt(i),可以减少循环次数
//整除可以判断因子
if(i%j==0) //如果是因子,就跟加到sum上。
sum+=j;
}
//循环结束后就得到因子的和sum了。
//因子之和与它本身比,如果相同则输出
if(sum==i) System.out.println(i);
}
}
//完数函数体尾
}
复制代码
作者:
王国库
时间:
2013-12-11 00:05
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:12
本帖最后由 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等等。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2