1、完美数(完全数)
一个自然数的所有真因子的和 = 该自然数 ==> 完全数
例如:6 = 1+2+3
28 = 1+2+4+7+14
最快的判断一个数是不是完美数的办法就是:
import java.util.Scanner;
/**
* @ClassName TestDemo15
* @Description 完全数
* 一个自然数的所有真因子的和 = 该自然数 ==> 完全数
* 一个自然数的所有真因子的和 < 该自然数 ==> 亏数
* 一个自然数的所有真因子的和 > 该自然数 ==> 盈数
* @Author lzq
* @Date 2018/12/5 11:50
* @Version 1.0
**/
public class TestDemo15 {
/**
* 查找给定范围内的完美数个数
* @param n
* @return
*/
public static int count(int n){
if(n <= 0 || n > 500000) {
return -1;
}
int count = 0;
for(int i = 2;i <= n;i++){
if(isPerfect(i)){
count++;
}
}
return count;
}
/**
* 这是最快的判断方法
* @param src
* @return
*/
private static boolean isPerfect(int src){
int sum = 1;
/**
* 从2开始遍历 只需要遍历前面半部分就可以了,这个判断的
* 终止条件就是当前分解因子的平方小于等于完美数,因为前面的半部分的最
* 后一个分解因子和后面部分的第一个分解椅子的区别就是这个
*/
for(int i =2;i*i<=src;i++){
if(src%i==0){
sum += i;
sum += src/i;
}
}
if(sum==src){
return true;
}
return false;
}
public static void main(String [] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n = in.nextInt();
System.out.println(count(n));
}
}
}
2、待续