public class PerfectNumberTest {
public static void main(String[] args) {
int count = 0;//定义一个计数器
System.out.println("1~10000范围内的所有完数如下:");
long start = System.currentTimeMillis();
for (int num = 2; num <= 10000 ; num ++ ) {
int sum = 0;//定义一个因子求和公式
for (int divisor = 1 ; divisor <= num / divisor ; divisor ++) {
if (num % divisor == 0 && divisor != num / divisor) {//若num开根号结果不是他的因子
sum = divisor + (num / divisor) + sum;//则num/divisor也一定是他的因子
} else if (num % divisor == 0 && divisor == num / divisor) {//若num开根号的结果是他的因子
sum = divisor + sum;//则只把因子(num/divisor重复因子)赋值给sum
}
}
if ((sum - num) == num) {//如果因子之和-该数等于该数,则这个数就是完数
count ++;//计数器加一
System.out.println("第 " + count +" 完数是: " + num);//输出完数
}
}
long end = System.currentTimeMillis();
System.out.println("遍历全部完数所使用的时间: " + (end - start) + " 毫秒");
}
}
参考简书的一篇文章 http://www.jianshu.com/p/5a0d45da2b99