java——LeetCode(二)
阿新 • • 發佈:2018-12-21
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、待續