题解 | 完数与盈数

#include <bits/stdc++.h>
#include <vector>
using namespace std;

int isFu(int x){
    int ans=0;
    for(int i=1;i<x;i++){
        if(x%i==0)ans+=i;
    }
    if(x==ans)return 1;
    else if(ans>x) return 2;
    else return 0;
}

int main(){
    vector<int>full,over;
    over.push_back(2);
    for(int i=3;i<=60;i++){
        if(isFu(i)==1)full.push_back(i);
        else if(isFu(i)==2)over.push_back(i);
    }
    cout<<"E: ";
    for(auto a:full)cout<<a<<" ";
    cout<<"G: ";
    for(auto a:over)cout<<a<<" ";
}
#include <bits/stdc++.h>
#include <vector>
using namespace std;

int isFu(int x){
    int ans=0,tmp=(int)sqrt(x);
    for(int i=1;i<=tmp;i++){
        if(x%i==0){
            ans+=i;
            if(i!=1)ans+=x/i;
        }
    }
    if(tmp*tmp==x)ans-=tmp;
    if(x==ans)return 1;
    else if(ans>x) return 2;
    else return 0;
}

int main(){
    vector<int>full,over;
    over.push_back(2);
    for(int i=3;i<=60;i++){
        if(isFu(i)==1)full.push_back(i);
        else if(isFu(i)==2)over.push_back(i);
    }
    cout<<"E: ";
    for(auto a:full)cout<<a<<" ";
    cout<<"G: ";
    for(auto a:over)cout<<a<<" ";
}

数据量很小,可以直接扫描,有一个简单的数学优化,可以减少一定的复杂度

全部评论
根据乘法规则,这题应该是可以优化的,因为出现一个因数的时候,另一个因数一定会出现
点赞 回复 分享
发布于 01-17 13:11 河南

相关推荐

06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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