10000以内的完数

/* * 问题描述:求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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值