问题描述
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6就是“完数”。又如,28的因子为1、2、4、7、14,而28=1+2+4+7+14,因此28也是“完数”。编写一个程序,判断用户输入的一个数是否为“完数”。
输入格式:输入只有一行,即一个整数。
输出格式:输出只有一行,如果该数为完数,输出yes,否则输出no。
输入输出样例
【样例输入】
6
【样例输出】
yes
【我的思路】:找到小于这个数的所有真因子,继而累加并判断是否等于这个数
解决方法
import java.util.*;
public class perfect {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (isPerfectNumber(n))// 调用函数
{
System.out.println("yes");
} else {
System.out.println("no");
}
}
/**
* 判断一个数是否为完数
* @param n 用户输入的一个整数
* @return 返回真或假
*/
public static boolean isPerfectNumber(int n)
{
int i, sum = 0;
for (i = 1; i < n; i++) // 循环遍历小于n的整数
{
if (n % i == 0) // 判断如果可以整除,则为真因子
{
sum += i; // 累加所有真因子
}
if (sum == n)
return true;// 判断此数符合条件,返回true
}
return false; // 不符合条件,返回false
}
}