求n到m之间的完数(1<=n<m<=1000)
import java.util.Scanner;
public class Main {
public static void perfect(int num) { //判断是否是完数的函数
int j=0;
int sum=0;
for(int i=2;i<Math.sqrt(num);i++) //一个数的因子必然有一个小于它的平方根
{//由于1是所有数的因子,故for循环从2开始
if(num%i==0) //如果余数为0说明i是num因子
{
j=num/i; //求另一个因子
sum+=j+i;
}
}
if(sum==num-1)//判断因子和是否与num相等,由于求因子和时并没有算上1,故num-1
System.out.print(num+" ");
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int m=in.nextInt();
for(int i=2;i<=m;i++)
perfect(i);
}
}
输出示例1
1 100
6 28
输出示例2
1 1000
6 28 496