这篇文章讲述的是算法趣味整数部分的完数问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的《c语言趣味编程1000例》,如有错误或者不当之处,还望各位大神批评指正。
问题描述
求某个范围内完数的个数。如果一个数等于它的因子之和,则称该数为完数(或完全数),例如,6的因子为1,2,3,而6=1+2+3,因此6是完数。
算法分析
所谓因子,如a为N的因子,那么满足条件N%a==0称a为N的因子,假设范围为begin~end,那么从begin开始分别于条件判断若满足条件则累加起来即可。
代码实现
package funnyInteger;
public class Q1_PerfectNumber {
/**
* 问题描述:求某个范围内完数的个数。如果一个数等于它的因子之和,则称该数为完数
* (或完全数),例如,6的因子为1,2,3,而6=1+2+3,因此6是完数。
*
* 算法描述:所谓因子,如a为N的因子,那么满足条件N%a==0称a为N的因子,假设范围为
* begin~end,那么从begin开始分别于条件判断若满足条件则累加起来即可。
*/
public static void main(String[] args) {
/*设置判断的范围*/
int begin = 2 ,end = 1000 ;
int sum = 0 ;
System.out.println(begin+"~"+end+"内的完数有:");
/*使用一个循环判断该范围内的数是否满足条件*/
for(int i=begin ; i<=end ;i++){
//提取每一个因子相加,范围1~i-1
int index = 0 ;
for(int j=1 ; j<=i/2 ; j++){
if(i%j==0){
index+=j ;
}
}
//判断是否满足完数的条件
if(i==index){
System.out.println(i);
sum++ ;
}
}
/*输出结果*/
System.out.println("共"+sum+"个");
}
}
样例输出
2~1000内的完数有:
6
28
496
共3个