解法一、窮舉 2 ~ n
窮舉 ~ 之間所有的數
計算因數總和
✅ 完整代碼
評分結果(參考) : AC (3ms, 336KB)
#include<bits/stdc++.h>
using namespace std;
int f(int num){
int sum = 1;
for(int i=2; i<num; i++){
if(num%i == 0) sum += i;
}
return sum;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
while(cin >> n){
if(n < f(n)) cout << "盈數\n";
else if(n > f(n)) cout << "虧數\n";
else cout << "完全數\n";
}
return 0;
}
解法二、檢查到 sqrt(n)
窮舉 ~ 之間所有的數
由於因數都是成對出現的
每找到一個因數,也會發現另一個 (, a, b 都是 n 的因數)
特殊處理 完全平方數 (因數 會多算一次,減回去)
✅ 完整代碼
評分結果(參考) : AC (2ms, 320KB)
#include<bits/stdc++.h>
using namespace std;
int f(int num){
int sum = 1;
int sqrtNum = sqrt(num);
for(int i=2; i<=sqrtNum; i++){
if(num%i == 0) sum += i+num/i;
}
if(sqrtNum*sqrtNum == num) sum -= sqrtNum;
return sum;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
while(cin >> n){
if(n < f(n)) cout << "盈數\n";
else if(n > f(n)) cout << "虧數\n";
else cout << "完全數\n";
}
return 0;
}