import java.util.LinkedList;
/**
* 一个数如果恰好等于它的所有可能因子之和, 这个数就称为"完数"。
* 例如6=1+2+3.
* 编程 找出1000以内的所有完数
*
* @author pear
*
*/
public class PerfectNumber {
private final static PerfectNumber p = new PerfectNumber();
static int currentNum = 1;
public static void main(String[] args) {
PerfectNumber p = getInstance();
int n=1;
while(n<1000){
n = p.getNext();
System.out.println(n);
}
}
private PerfectNumber(){
}
public static PerfectNumber getInstance(){
return p;
}
/**
* 计算下一个完数
* @param num 指定数字
* @return 返回指定数字后最近一个完数
*/
public int getNext(int num){
num++;
while(!isPerfect(num)){
num++;
}
currentNum = num;
return num;
}
public int getNext(){
return getNext(currentNum);
}
private boolean isPerfect(final int num){
int number = num;
LinkedList<Integer> factor = new LinkedList<Integer>();
for(int i=1; i<=number/2; i++){
if(number%i==0) factor.add(i);
}
int sum =0;
for(int x:factor){
sum += x;
}
return sum==num;
}
}
学习中,顺带练习一下设计模式