10000以内的完数

本文介绍了一个C++程序,用于找出10000以内的所有完数,并将这些完数存储在vector中。通过输入任意正整数,程序会输出该数以内所有的完数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/* * 问题描述:求10000以内的完数。 * 完数即:一个数等于它的不同因子的和 * 如6=1+2+3.8!=1+2+4 * xtfggef 2012/5/16 */ #include<iostream> #include<fstream> #include<vector> using namespace std; /* * 思路:先把10000以内的完数算出来,放在 * 一个vector里,再和给定的数比较,如果小于 * 给定的数,就打印出来。还有一个思路:就是 * 直接计算小于给定的数的完数,这样可以 * 少计算点儿。 */ int main(int argc, char * argv[]) { //此处引入文件操作 ifstream cin("seed.txt"); int n; vector<int> a; /* * 此处需要说明一下,为什么下面的for * 循环为i=i+2,这说明完数只有在偶数里 * 有,奇数在一个小的范围内没有完数 * 具体在哪个范围,数学界还没有证明出来 */ for(int i=2; i<10000; i=i+2) { int sum = 1; for(int j=2; j<=i/2; j++) { //如果模除为0,则是它的因子,所以加上去 if(i%j==0) sum=sum+j; } if(sum==i) a.push_back(i); } while(cin>>n) { cout << n << ":"; for(int k=0; k<a.size(); k++) { if(a[k]<=n) cout << " " << a[k]; } cout << endl; } return 0; }

百度百科完数:http://baike.baidu.com/view/640632.htm


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值