找 完全数

来源:互联网 发布:4g卡不能用3g网络么? 编辑:程序博客网 时间:2024/05/16 18:18
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;    }}

学习中,顺带练习一下设计模式

0 0
原创粉丝点击