題解:UVA13185 DPA Numbers I

KukCair發表於2024-11-23

UVA13185 DPA Numbers I

基本思路

對於每個 \(n\),列舉 \(n\) 的因數,最後判斷因數大小即可。

直接列舉到 \(n-1\) 有點浪費,所以可以只列舉到 \(\sqrt{n}\),加上因數與 \(n\) 除以此因數的商。

注意:最後要減去 \(n\),且 \(n\) 為完全平方數時要減去一個 \(\sqrt{n}\)

程式碼實現

#include <bits/stdc++.h>
using namespace std;
int t;
void isorisnt(int x){
    int sum = 0;
    for(int i = 1; i * i <= x; i++){
        if(x % i == 0){
            if(x / i == i) sum += i;
            else sum += x / i + i;
        }
    }
    sum -= x;
    if(sum > x) cout << "abundant\n";
    else if(sum == x) cout << "perfect\n";
    else cout << "deficient\n";
}
int main(){
    cin >> t;
    while(t--){
        int a;
        cin >> a;
        isorisnt(a);
    }
    return 0;
}

相關文章