问题 A: 完数

时间限制: 1 Sec  内存限制: 32 MB
提交: 252  解决: 178
[提交][状态][讨论版][命题人:外部导入]

题目描述

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

输入

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

输出

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

样例输入

6

样例输出

6



#include<bits/stdc++.h>
 
using namespace std;
const int N=1e4+10;
int p[N];
int cnt=0;
void solve()//筛选那些是完数
{
    //cout<<"fssfdaf"<<endl;
    for(int i=2;i<N;i++){
        //cout<<"110"<<endl;
        int sum=0;
        for(int j=1;j<=sqrt(i);j++){
            if(i%j==0){
                sum+=j+i/j;
            }
        }
        if(sum==2*i) p[cnt++]=i;//这里是2倍 因为加的时候慧多加个i
    }
}
int main()
{
    int n;
    solve();
    while(scanf("%d",&n)==1){
        int flag=0;
        for(int i=0;i<=n&&p[i]<=n;i++){
            flag++;
        }
        for(int i=0;i<flag;i++){
            if(i) printf(" ");
            printf("%d",p[i]);
        }
        printf("\n");
    }
 
    return 0;
}

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄