#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==0) {
N -= 3;
R *= 3;
}
else {
N -= 2;
R *= 2;
}
//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 N3 = MakeHoge3(i);
std::cout << i << '{'<<std::endl << N1<<std::endl <<N2<<std::endl<<N3<<std::endl<<'}'<<std::endl<<std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGludD4KCnN0ZDo6dWludG1heF90IE1ha2VIb2dlKHN0ZDo6dWludG1heF90IE4pIHsKCglzdGQ6OnVpbnRtYXhfdCBSID0gMTsKCWlmIChOID09IDApIHsgcmV0dXJuIDA7IH0KCWlmIChOID09IDEpIHsgcmV0dXJuIDE7IH0KCXdoaWxlIChOKSB7CgkJaWYgKE4gPT0gMykgewoJCQlOIC09IDM7CgkJCVIgKj0gMzsKCQl9ZWxzZXsKCQkJTiAtPSAyOwoJCQlSICo9IDI7CgkJfQoJCS8vbj09IDEgaXMgUioxPT8uCgl9CglyZXR1cm4gUjsKfQoKc3RkOjp1aW50bWF4X3QgTWFrZUhvZ2UyKHN0ZDo6dWludG1heF90IE4pIHsKCglzdGQ6OnVpbnRtYXhfdCBSID0gMTsKCWlmIChOID09IDApIHsgcmV0dXJuIDA7IH0KCWlmIChOID09IDEpIHsgcmV0dXJuIDE7IH0KCXdoaWxlIChOKSB7CgkJaWYgKE4gJSAzPT0wKSB7CgkJCU4gLT0gMzsKCQkJUiAqPSAzOwoJCX0KCQllbHNlIHsKCQkJTiAtPSAyOwoJCQlSICo9IDI7CgkJfQoJCS8vbj09IDEgaXMgUioxPT8uCgl9CglyZXR1cm4gUjsKfQoKc3RkOjp1aW50bWF4X3QgTWFrZUhvZ2UzKHN0ZDo6dWludG1heF90IE4pIHsvL+mBqeW9k+e0oOWboOaVsOWIhuino++8n++8nwoKCXN0ZDo6dWludG1heF90IFIgPSAxOwoJaWYgKE4gPT0gMCkgeyByZXR1cm4gMDsgfQoJaWYgKE4gPT0gMSkgeyByZXR1cm4gMTsgfQoJZm9yIChzdGQ6OnVpbnRtYXhfdCBpID0gMjsgTjsgaSsrKSB7CgkJd2hpbGUgKE4gJSBpID09IDAmJk4pIHsKCQkJTiAtPSBpOwoJCQlSICo9IGk7CgkJCgkJCgkJfQoJfQoJcmV0dXJuIFI7Cn0KCmludCBtYWluKCkgewoKCWZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPD0gMTAwOyBpKyspIHsKCQlzdGQ6OnVpbnRtYXhfdCBOMSA9IE1ha2VIb2dlKGkpOwoJCXN0ZDo6dWludG1heF90IE4yID0gTWFrZUhvZ2UyKGkpOwoJCXN0ZDo6dWludG1heF90IE4zID0gTWFrZUhvZ2UzKGkpOwoJCXN0ZDo6Y291dCA8PCBpIDw8ICd7Jzw8c3RkOjplbmRsIDw8IE4xPDxzdGQ6OmVuZGwgPDxOMjw8c3RkOjplbmRsPDxOMzw8c3RkOjplbmRsPDwnfSc8PHN0ZDo6ZW5kbDw8c3RkOjplbmRsOwoJfQoKCXJldHVybiAwOwp9