牛客网 完数与盈数题解

题目描述

一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1,则称其为“完数”;若因子之和大于该数,则称其为“盈数”。
求出2 到60 之间所有“完数”和“盈数”,并以如下形式输出: E: e1 e2 e3 ......(ei 为完数) G: g1 g2 g3 ......(gi 为盈数)
 
我的题解:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

class project{
public:
    void fun1(){
        int i,sum;
        vector<int> vi1;
        vector<int> vi2;
        for(int n=2; n<=60; n++){
            sum=0;
            for(i=1;i<n; i++){
                if(n%i==0) sum+=i;
            }
            if(n==sum) vi1.push_back(n);
            if(n<sum) vi2.push_back(n);
        }
        
        
        cout << "E:";
        for(auto v1:vi1){
            cout<<" " << v1;
        }
        cout << " ";
        cout << "G:";
        cout <<" "<< 2;
        for(auto v2:vi2){
            cout<<" " << v2;
        }
    }
    
};

int main()
{
    project P;
    P.fun1();
    return 0;
}

2不是盈数,为符合“官方答案”加上 cout << " " << 2 << endl;

算法效率:

猜你喜欢

转载自www.cnblogs.com/HonkerYblogs/p/10543807.html
今日推荐