範例程式碼 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;
}