(C语言)一个数如果恰好等于它的因子之和,这个数就称为”完数。找出1000之内的所有完数。

如题所述

include <iostream>

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语言

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-30
楼主,你好!
n++,代表n自己增加1。
s=s-i,代表s减去i之后,把算得的结果再赋给s存放起来
k[n]=i,表示定义了一个数组k,n是它的下标,把i的值赋给k[n]
n设为-1是因为执行n++之后,n变成了0,数组k[n]是k[0]开始的。所以要n=-1;
其实这个程序个人认为写得并不很好。绕了一大圈。。应该从n=0开始。在k[n]=i之后n才执行n++;
感觉你好像是初学C,加油吧,多看书!本回答被提问者采纳
第2个回答  2019-10-02
在c语言中,“^”是双目运算符,用于完成两个数据的按位异或操作。该运算符可以用来进行两个数据的比较或者对一个数据中的某些位进行处理。
1、if(a^0x8)a=0;//如果a不等于08h则a=0
2、a=a^0xf0;//将a的高4位取反低4位不变后存回a
相似回答