public
static
void
main(String[]
args)
throws
Exception
{
//
TODO
Auto-generated
method
stub
long
num
=
Long
.parseLong(new
BufferedReader(new
FileReader("n.txt"))
.readLine())
for
(int
i
=
2
i
<=
num
i++)
{
if
(perfectNum(i))
System.out.println(i
+
"是完全数")
}
}
/**
*
判断一个数是否是完全数的方法
*
*
@param
num
*
@return
*/
public
static
boolean
perfectNum(long
num)
{
int
sum
=
0
for
(int
i
=
1
i
<=
num
/
2
i++)
{
if
(num
%
i
==
0)
{
sum
+=
i
//
System.out.println(i)
}
}
return
sum
==
num
}
看不懂的话给我发信息。我已经写的很详细了,有些基本语法要不懂,可以查下百度。public class test{
//取出1-no之间的所有完数
public static void getWS(int no){
for(int i=4i<=noi++){//因为1,2,3肯定不是完数,就姑且从4开始检查,一直检查到no
if(checkWS(i)){
System.out.println(i)//调用checkWS(int n)方法,检查该整数是否是完数。如果该数是完数,输出。
}
}
}
//判断整数n是否是完数
public static boolean checkWS(int n){
int sum=1//1肯定是一个能整除整数n的被除数,初始化n的所有因子之和sum
for(int i=2i<=n/2i++){
if(n%i==0){//%求余,如果余数等于0,则i为该整数的因子,那么把sum=sum+i.这里只检查从2到n/2之间的数,因为大于4的整数最大的因子不会超过他的一半, 这样能提高程序效率
sum+=i
}
}
return sum==n?true:false//如果最终因子和sum等于它本身则返回true,否则返回false
}
public static void main(String args[]){
getWS(100)//输出100内的完数,这里的数字填多少就找出1-多少之间的所有完数
}
}