| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1059 人关注过本帖
标题:找完全数
只看楼主 加入收藏
思考ING
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:140
专家分:0
注 册:2008-3-12
收藏
 问题点数:0 回复次数:2 
找完全数
编一个程序,求1000内的所有完全数~~~~~~~~~
同上个题一样,不知道那种约数怎么写代码,另麻烦也编一下吧~~~~~~~~~
搜索更多相关主题的帖子: 完全数 约数 代码 麻烦 
2008-03-29 01:07
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
收藏
得分:0 
完全数
【定义】若一个自然数,恰好与除去它本身以外的一切因数的和相等,这种数叫做完全数。
例如,6=1+2+3  
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248
8128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064
【公式】大数学家欧几里德曾推算出完全数的获得公式:如果2^p-1质数,那么(2^p-1)2^(p-1)便是一个完全数。p=2,2^p-1=3是质数,(2^p-1)2^(p-1)=3X2=6,p=3,2^p-1=7是质数,(2^p-1)2^(p-1)=7X4=28

参考资料:
http://baike.baidu.com/view/19074.htm?fr=topic

看完上面,是不是容易多了?
这里只算1000以内的.没有优化...

public class example2 {
    public static void main(String[] args) {
        final int MAX = 1000;
        int i=2;
        System.out.println("1000以内的完全数是:");
            while(true)
            {
                int prime=(int) (Math.pow(2,i)-1);
                int temp = (int) ((Math.pow(2,i)-1)*(Math.pow(2,(i-1))));
                if(temp > MAX)break;
                int j =2;
                while(j <= Math.sqrt(prime) )//计算是否是质数
                {
                    if(prime%j == 0)
                        break;
                    j++;
                }
            if(j >Math.sqrt(prime))//prime是质数,根据前面的理论,可得temp是完全数.打印.
                    System.out.print(temp+"\t");
            i++;
           }
    }
}
2008-03-29 10:37
思考ING
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:140
专家分:0
注 册:2008-3-12
收藏
得分:0 
好~~~~~~~~~~
谢了啊~~~~~~~~~
知道数学算法比直接求解ms要简单许多哦~~~~~~~~~

天生孤独的思考~~~~~~~~~
2008-03-29 16:12
快速回复:找完全数
数据加载中...
 
   



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

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