import java.util.Scanner;

 /**
*
* 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。
* 它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
* 例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
*
* 给定函数count(int n),用于计算n以内(含n)完全数的个数
* @param n 计算范围, 0 < n <= 500000
* @return n以内完全数的个数, 异常情况返回-1
*
*/
public class PerfectNumber {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in) ;
int n = cin.nextInt() ;
cin.close();
System.out.println(count(n));
} /**
* 统计小于等于n的正整数中有多少个完美数
* @param n
* @return 小于等于n的正整数中完美数的个数
*/
public static int count(int n){
int count = 0 ;
for(int i = 1 ; i <= n ; i++){
if(judgePerfect(i)){
count++ ;
}
}
return count ;
} /**
* 判断数x是否都是完美数
* @param x
* @return 是则返回true,否则返回false
*/
private static boolean judgePerfect(int x) {
//end表示判断的结束值,这样可以提高性能,减少判断的次数
int end = x/2 ;
int sum = 1 ;
for(int i = 2 ; i <= end ; i++){
if(x%i == 0){
if(x/i == end){
sum = sum + end ;
}else{
sum = sum + i + end ;
}
end = x/(i+1) ;
}
}
if(sum == x){
return true ;
}else{
return false;
}
}
}

最新文章

  1. C++常考面试题汇总
  2. Centos下ACL(访问控制列表)介绍(转)
  3. EUI ToggleButton ToggleSwitch 实现类似音乐开关按钮
  4. wifi diplasy流程介绍
  5. Codeforces Round #215 (Div. 2) A. Sereja and Coat Rack
  6. Gt9xx芯片,在规格书+Linux驱动的基础上,移植为USB裸机经验。直接用开发板,不去碰硬件的坑。
  7. 排列组合[HDU1521]
  8. 关于python中使用mongodb模块,save和insert的小问题
  9. Windbg抓取程序崩溃的dmp文件的方法
  10. Web开发人员不要错过的60款用户界面设计工具(下)
  11. [转]Linux网络配置命令ifconfig输出信息解析
  12. Java多线程volatile和synchronized总结
  13. log4j的配置与使用
  14. Tomcat 优化方案 和 配置详解(转)
  15. Java 自增原理
  16. sails.js mvc framework learning
  17. Spark随机森林实战
  18. 父类与子类this相关问题
  19. Java Jackson - Json Polymorphism
  20. USB2.0学习笔记连载(十八):keil实现寄存器的配置及相关函数讲解(二)

热门文章

  1. 206. Reverse Linked List
  2. ZooKeeper典型应用场景(转)
  3. BestCoder Round #84 Bellovin
  4. codeforces 55D - Beautiful numbers(数位DP+离散化)
  5. Linux命令(14)文件和文件夹权限管理:chmod
  6. ubuntu 修该rm命令使删除文件到回收站
  7. mysql 增加用户
  8. ruby迭代器枚举器
  9. 01.base-v1.js
  10. type和role属性有什么区别呢