高分悬赏,Java语言计算完备数,完备数又叫完美数,是指每个因数相加等于自身的数,比如28=1+2+4+7+14,输出前1000个完备数

高分悬赏,Java语言计算完备数,完备数又叫完美数,是指每个因数相加等于自身的数,比如28=1+2+4+7+14,输出前1000个完备数

还是提供实现思路如下:

1、抽取一个判断完备数的方法;
2、定义一个计数器 count,currentNumber 当前数指示器;
3、循环计数器达到一千结束,判断当前数是否满足 1 ,是则 count++;currentNumber ++

public class sum {
public static void main(String[] args) {
for(int i = 1;i<=1000;i++) {
int sum = 0;
for(int j = 1;j<=i/2;j++) {
if(i%j == 0) {
sum += j;
}
}
if(sum == i) {
System.out.println(i);
}
}
}
}

输出结果为:6 ,28 ,496

第一种好理解就是从1到该数的1/2一个个加,第二个用了平方根,数据越大,计算次数比第一个少的更多,因为1的时候加了它本身,所有起始值设为了他的相反数,平方根的时候重复计算了,所以减去一次
public static void perfectNum1(int range){

    for (int i = 1; i < range; i++) {
        int temp = 0;
        for (int j = 1; j <= i/2 ; j++) {
            if (i % j == 0){
                temp += j;
                if (temp > i){
                    break;
                }
            }
        }
        if (temp == i){
            System.out.println("perfecr=" + i);
        }
    }
}

public static void perfectNum2(int range){

    for (int i = 1; i < range; i++) {
        int temp = -i;
        for (int j = 1; j <= Math.sqrt(i) ; j++) {
            if (i % j == 0){
                temp +=j;
                temp +=(i/j);
                if (temp > i){
                    break;
                }
            }
            if (j == Math.sqrt(i)){
                temp -= j;
            }
        }
        if (temp == i){
            System.out.println("perfect:" + i);
        }
    }
}
public static void main(String[] args) {
        int i = 1;
        List<Integer> result = new ArrayList<>();
        while (result.size() < 1000) {
            if (validateCompleteNumber(i)) {
                System.out.println(i);
                result.add(i);
            }
            i++;
        }
        System.out.println(result.toString());
    }

    private static boolean validateCompleteNumber(int n) {
        int sum = 1;
        for (int i = 2; i <= Math.sqrt(n); i++) {
            if (n % i == 0) {
                sum += (i + n / i);
            }
        }
        if (sum == n) {
            return true;
        }
        return false;
    }

package com.test;

/**

  • Java语言计算完备数,完备数又叫完美数,是指每个因数相加等于自身的数,比如28=1+2+4+7+14,输出前1000个完备数
  • @author zhanglei
  • @date 2020/03/25
    */
    public class Test1 {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    int count = 1;//等于1000返回
    int start = 1;
    while(true) {
    if(count>1000) {
    break;
    }
    if(match(start)) {
    System.out.println("第"+count+"个完美数是:"+start);
    count++;
    }
    start++;
    }
    System.out.println("计算完毕!");
    }
    private static boolean match(int m) {
    int sum = 0;
    for(int i=1;i<=m/2;i++) {
    if(m%i==0) {
    sum+=i;
    }
    }
    if(sum==m) {
    return true;
    }
    return false;

    }

}
//输出结果:
第1个完美数是:6
第2个完美数是:28
第3个完美数是:496
第4个完美数是:8128
........
........
........

卧槽都好好看看是输出前1000个完备数,不是1000以内的完备数