题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程 找出1000
找出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语言
2016-04-09
dim i as Long,j as Long,k as Long
for i=1 to 10000
j=1
for k=2 to int(i/2+0.01)
if i mod k=0 then
j=j+k
end if
next k
if j=i then
console.writeline(i)
end if
next i
_____初始化sum=0
_____枚举[1,k]的每一个整数i
__________若i能整除k,则将i累加到sum上
__________若中途sum>k,则可以直接抛弃对本次的k的处理
_____若sum=k,输出k
退出