高分悬赏,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;
/**
@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以内的完备数