九度oj 题目1050:完数

题目1050:完数

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:8778

解决:3612

题目描述:

    求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子相加和的数。

输入:

    测试数据有多组,输入n,n数据范围不大。

输出:

    对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。

样例输入:
6
样例输出:
6

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <vector>
 4 #include <cmath>
 5 using namespace std;
 6 
 7 int main(){
 8     int n, sum, i, j, k;
 9     vector<int> v;
10     while(cin >> n){
11         v.clear();
12         for(i = 2; i <= n; i++){
13             sum = 1;
14             for(j = 2; j <= sqrt(i); j++){
15                 if(i % j == 0){
16                     if(j * j == i)
17                         sum += j;
18                     else
19                         sum += (j + i / j);
20                 }
21             }
22             if(sum == i)
23                 v.push_back(i);
24         }
25         cout << v[0];
26         for(k = 1; k < v.size(); k++)
27             cout << " " << v[k];
28         cout << endl;
29     }
30     return 0;
31 }
 
原文地址:https://www.cnblogs.com/qinduanyinghua/p/6440423.html