完全数
【定义】若一个自然数,恰好与除去它本身以外的一切因数的和相等,这种数叫做完全数。
例如,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++;
}
}
}