範例程式碼 uva160
//uva160
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main() {
int n, num, idx, length;
vector<vector<int>> a(101);
vector<int> temp_vector;
vector<int> prime = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61,
67, 71, 73, 79, 83, 89, 97};
unordered_map<int, int> m;
for (int i = 0; i < 25; ++i)
m[prime[i]] = i;
vector<bool> is_prime = {0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0,
1, 0, 1, 0, 0, 0, 1, 0, 1, 0,
0, 0, 1, 0, 0, 0, 0, 0, 1, 0,
1, 0, 0, 0, 0, 0, 1, 0, 0, 0,
1, 0, 1, 0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 1, 0,
1, 0, 0, 0, 0, 0, 1, 0, 0, 0,
1, 0, 1, 0, 0, 0, 0, 0, 1, 0,
0, 0, 1, 0, 0, 0, 0, 0, 1, 0,
0, 0, 0, 0, 0, 0, 1, 0, 0, 0};
a[2].push_back(1);
for (int i = 3; i <= 100; ++i) {
temp_vector = a[i - 1];
if (is_prime[i]) {
temp_vector.push_back(1);
}
else {
num = i;
idx = 0;
while (idx < 4) {
if (num % prime[idx] == 0) {
num /= prime[idx];
++temp_vector[idx];
}
else
++idx;
}
if (num > 1)
++temp_vector[ m[num] ];
}
a[i] = temp_vector;
}
scanf("%d", &n);
while (n != 0) {
printf("%3d! =", n);
length = a[n].size();
for (int i = 0; i < length; ++i) {
if ((i % 15 == 0) && (i != 0))
printf("\n ");
printf("%3d", a[n][i]);
}
printf("\n");
scanf("%d", &n);
}
return 0;
}