算法训练 求1000以内的完数 JAVA
问题描述
如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数”。例如6的因子是1,2,3,且6=1+2+3,因此6是完数。编写程序找出1000之内的所有完数。注意1不是完数。
输入格式
无
输出格式
如有多个完数,则分行输出,每行输出一个完数。(注意,不要输出其他任何多余字符)
public class 求1000以内的完数 {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=6;i<=1000;i++)//最小的完数是6,所以直接从6开始
{
if(iswanshu(i)==true)
System.out.println(i);
}
}
public static boolean iswanshu(int i)//判断是否是完数
{
int sum=0;
for(int j=2;j<=(i/2);j++)
{
if(i%j==0)
{
sum+=j;
}
}
if(sum+1==i)//上面是从2开始的,1是每个数的因子,所以sum+1
return true;
else {
return false;
}
}
}