当前位置: 代码迷 >> Java相关 >> 找完全数
  详细解决方案

找完全数

热度:276   发布时间:2008-03-29 01:07:15.0
找完全数
编一个程序,求1000内的所有完全数~~~~~~~~~
同上个题一样,不知道那种约数怎么写代码,另麻烦也编一下吧~~~~~~~~~
搜索更多相关的解决方案: 完全数  约数  代码  麻烦  

----------------解决方案--------------------------------------------------------
完全数
【定义】若一个自然数,恰好与除去它本身以外的一切因数的和相等,这种数叫做完全数。
例如,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++;
           }
    }
}
----------------解决方案--------------------------------------------------------
好~~~~~~~~~~
谢了啊~~~~~~~~~
知道数学算法比直接求解ms要简单许多哦~~~~~~~~~
----------------解决方案--------------------------------------------------------
  相关解决方案