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