JAVA编程题:找出1000以内的完数:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.

2024-11-08 03:35:37
推荐回答(4个)
回答1:

include

using namespace std;

int main() {

for (int i = 2; i <= 1000; i++) {//从2到1000的数

int sum = 0;//因子总和

for (int j = 1; (j * j) <= i; j++) {//j做除数,√n复杂度,减少一半的计算量

if (i % j == 0) {//可以整除,为其因子

sum = j + (i / j) + sum;//因子之和

}

}

if ((sum - i) == i) cout << "1000以内的完数:" << i << endl;//因子之和减去其本身(1*i也为其因子)如果等于这个数本身,则为完数

}

}

扩展资料

在数学领域,6是第一个完全数,也是最小的完全数。所谓完全数(又称完美数或完备数),是一种特殊的自然数;它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。

例如6有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6;第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。公元前6世纪的古希腊数学家、哲学家毕达哥拉斯是最早探究完全数的人,他已经知道6和28这两个自然数是完全数了。

参考资料来源:百度百科-C语言

回答2:

for(int i=1;i<1001;i++)
{
int sum=0;
for(int j=1;j if(i%j==0) sum+=j;
if(sum==i) System.out.println(i);
}

回答3:

2+4=6这算完数吗

回答4:

public class wsTest {
public static void main(String[] args) {
for(int m=2;m<1000;m++)
{
int s=0;
for(int i=1;i {
if((m%i)==0)
s+=i;
}
if(s==m)
{
System.out.print(m+" its factors are:");
for(int j=1;j {
if((m%j)==0)
{
System.out.print(j);
System.out.print(" ");
}
}
System.out.println();
}
}
}
}

结果:
6 its factors are:1 2 3
28 its factors are:1 2 4 7 14
496 its factors are:1 2 4 8 16 31 62 124 248