题目:
一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。
程序分析:
1)遍历i从2到1000的数;
2)对这个数i从1到a-1进行除,然后将所有能整除a的数进行相加得sum;
3)如果sum==a,则说明a为完数,否则,不是。
程序代码:
package com.ljy.tencent;
/**
* 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。
* 例如6=1+2+3.编程找出1000以内的所有完数。
* 思路:
* 1)遍历i从2到1000的数;
* 2)对这个数i从1到a-1进行除,然后将所有能整除a的数进行相加得sum,
* 3)如果sum==a,则说明a为完数,否则,不是。
* @author liaojianya
* 2016年10月6日
*/
public class WanShu
{
static int count = 0;
public static void main(String[] args)
{
//循环判断输出1~1000之间所有的完数
System.out.println("以下为1000以内的完数:");
for(int i = 2; i <= 1000; i++)
{
checkIs(i);
}
System.out.println();
System.out.println("1000以内的完数一共有" + count + "个。");
}
//判断是否为完数
public static void checkIs(int i)
{
int sum = 0;
//用1~i-1去整除i,如果能被整除,则j即为i的因子,加到sum中去。
for(int j = 1; j < i; j++)
{
if(i % j == 0)
{
sum += j;
}
}
//如果i所有因子相加后的sum和i本身的值相同,则i为完数,并计数加一。
if(sum == i)
{
count++;
System.out.print(i + "\t");
}
}
结果输出:
以下为1000以内的完数:
6 28 496
1000以内的完数一共有3个。