# 題目: UVa 11728 - Alternate Task
# 題目說明
給一個正整數 N
,代表某數的因數和,求某數
INPUT:
每筆測資輸入一個整數 N
當 N = 0
時結束
OUTPUT:
輸出一個因數和剛好為 N
的正整數
若無則輸出 -1
# 解題方法
使用 unordered_map
建表,將 1 ~ 1000
的因數和計算出來,再查表輸出答案即可
# 參考程式碼
#include <iostream> | |
#include <unordered_map> | |
using namespace std; | |
static auto fast_io = [] | |
{ | |
ios::sync_with_stdio(false); | |
cout.tie(nullptr); | |
cin.tie(nullptr); | |
return 0; | |
}(); | |
int main() | |
{ | |
unordered_map<int, int> M; | |
int N, cnt = 0; | |
for (int i = 1; i <= 1000; ++i) | |
{ | |
int sum = 0; | |
for (int j = 1; j <= i; ++j) if (i % j == 0) sum += j; | |
M[sum] = i; | |
} | |
while (cin >> N, N) | |
{ | |
cout << "Case " << ++cnt << ": " << (M[N] ? M[N] : -1) << "\n"; | |
} | |
} |