#include <iostream>
#include <cstdint>
std::uintmax_t MakeHoge(std::uintmax_t N) {
std::uintmax_t R = 1;
if (N == 0) { return 0; }
if (N == 1) { return 1; }
while (N) {
if (N == 3) {
N -= 3;
R *= 3;
}else{
N -= 2;
R *= 2;
}
//n== 1 is R*1=?.
}
return R;
}
std::uintmax_t MakeHoge2(std::uintmax_t N) {
std::uintmax_t R = 1;
if (N == 0) { return 0; }
if (N == 1) { return 1; }
while (N) {
if (N % 3) {
N -= 3;
R *= 3;
}
else{
N -= 2;
R *= 2;
}
//n== 1 is R*1=?.
}
return R;
}
std::uintmax_t MakeHoge22(std::uintmax_t N) {
std::uintmax_t R = 1;
if (N == 0) { return 0; }
if (N == 1) { return 1; }
while (N) {
if (N % 2) {
N -= 3;
R *= 3;
}
else{
N -= 2;
R *= 2;
}
if (N == 1) { N--; }
//n== 1 is R*1=?.
}
return R;
}
std::uintmax_t MakeHoge3(std::uintmax_t N) {//適当素因数分解??
std::uintmax_t R = 1;
if (N == 0) { return 0; }
if (N == 1) { return 1; }
for (std::uintmax_t i = 2; N; i++) {
while (N % i == 0&&N) {
N -= i;
R *= i;
}
}
return R;
}
int main() {
for (std::size_t i = 0; i <= 100; i++) {
std::uintmax_t N1 = MakeHoge(i);
std::uintmax_t N2 = MakeHoge2(i);
std::uintmax_t N22 = MakeHoge22(i);
std::uintmax_t N3 = MakeHoge3(i);
std::cout << i << '{'
<< std::endl << N1
<< std::endl << N2
<< std::endl << N22
<< std::endl << N3
<< std::endl << '}' << std::endl;
}
return 0;
}