文章

52

粉丝

68

获赞

22

访问

11.5k

头像
完数 题解:平方范围下判断,同时存储
P1046 兰州大学机试题
发布于2025年2月3日 15:38
阅读数 28

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

bool isPerfectNumber(int num,vector<int>&a) {
    vector<int>b;
    if (num < 2) return false; // 完数至少是 6
    int sum = 1; // 1 是所有数的真因子
    b.push_back(1);
    for (int i = 2; i * i <= num; i++) {
        if (num % i == 0) {
            sum += i;
            b.push_back(i);
            if (i != num / i) { // 避免重复添加平方根
                sum += num / i;
                b.push_back(num/i);
            }
        }
    }
    sort(b.begin(),b.end());
    a=b;
    return sum == num;
}
int main(){
    int n;
    while(cin>>n){
        for(int i=2;i<=n;i++){
            vector<int>a;
            if(isPerfectNumber(i,a)){
                cout<<i<<" its fastors are ";
                for(auto x:a)cout<<x<<' ';
                cout<<endl;
            }
        }
    }
}

判断如果是,那么一定存在一个成对的因子,假如这个因子就是整数且相同,那么我们就存储一个,也就是其中循环的判定,我们不需要存两个,但是因为我们...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发