题解 | 完数VS盈数

完数VS盈数

https://www.nowcoder.com/practice/ccc3d1e78014486fb7eed3c50e05c99d

#include <iostream>
#include<vector>
using namespace std;

int is_wanshu(int n){
    vector<int> factors;
    for(int i=1;i<=n/2;i++){
        if(n%i==0){
            factors.push_back(i);
        }
    }
    int sum=0;
    for(int f:factors){
        sum+=f;
    }
    if(sum==n){
        return 1;
    }else if(sum>n){
        return 0;
    }
    return -1;
}

vector<int> E,G;

int main() {
    for(int i=2;i<=60;i++){
        int type=is_wanshu(i);
        if(type==1){
            E.push_back(i);
        }else if(type==0){
            G.push_back(i);
        }
    }

    cout<<"E: ";
    for(int e:E){
        cout<<e<<" ";
    }
    cout<<endl;
    cout<<"G: ";
    for(int g:G){
        cout<<g<<" ";
    }
}
// 64 位输出请用 printf("%lld")

关键点:

  1. 求某个数n的因子时只遍历n/2即可:因为某个数n的最大因子一定小于n/2;
  2. for(int i=1;i<=n/2;i++){
  3. if(n%i==0){
  4. factors.push_back(i);
  5. }
  6. }
全部评论

相关推荐

点赞 评论 收藏
分享
熊大不大:微信也是华为旗下吧,我看我朋友也是华为工牌写wx
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务