完数: 又称perfect number,若一个数等于出其自身外所有因数(能被其整除的数)的和,则称该数为完数。例如6=1+2+3;28=1+2+4+7+14;
从这个定义可知,素数不能是完数。
题目: 输入两个数,例如1,10.找出这两个数中间存在的完数。
代码:
package findPerfectNumber;
import java.util.Scanner;
public class findPerfectNumber {
//判断一个数是否为素数
public static boolean isPrimeNumber(int a) {
boolean flag = true;
for(int b=2;b<a;b++) {
if(a%b==0) {
flag = false;
break;
}
}
return flag;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int m = in.nextInt();
int n = in.nextInt();
int a=0;
int sum=1;
for (int i=m;i<n;i++)
{
//System.out.print("i="+i+" ");
if (!isPrimeNumber(i))
{
for(int j=2;j<=i/2;j++)
{
//System.out.print("j="+j+" ");
if(i%j==0)
{
a=i/j;
sum=sum+a;
//System.out.print("sum="+sum+" ");
}
}
if((sum)==i)
{
System.out.println("the result:"+i);
}
}
sum=1;
//System.out.println();
}
}
}
结果输出:
1
100000000
the result:6
the result:28
the result:496
the result:8128
- 1、这题依然需要调用函数
isPrimeNumber
,因为若一个数为素数,则显然不可能是完数。所以只需去寻找区间内的非素数即可。 - 2、但一个数为非素数,则该数肯定存在因数,找出这所有的因数,相加并与该数比较,即可得到结果。
- 3、寻找因数的方法为,设置一个从
i=2
开始的循环,当i能被该数整出时,执行sum=sum+i;
循环的终止条件为i<=该数/2;
。