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;
}