#include <stdio.h>
void factorize(int n, int divisor, int count, int isFirst) {
if (n == 1) {
// 残っている因数があれば出力
if (count > 0) {
if (count == 1)
else
printf("%d^%d", divisor
, count
); }
return;
}
if (n % divisor == 0) {
// 同じ因数で割れたらカウントだけ増やす
factorize(n / divisor, divisor, count + 1, isFirst);
} else {
// 今までの因数を表示
if (count > 0) {
if (count == 1)
else
printf("%d^%d", divisor
, count
); isFirst = 0;
}
// 次の因数で再帰
factorize(n, divisor + 1, 0, isFirst);
}
}
int main() {
int n;
factorize(n, 2, 0, 1);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIGZhY3Rvcml6ZShpbnQgbiwgaW50IGRpdmlzb3IsIGludCBjb3VudCwgaW50IGlzRmlyc3QpIHsKICAgIGlmIChuID09IDEpIHsKICAgICAgICAvLyDmrovjgaPjgabjgYTjgovlm6DmlbDjgYzjgYLjgozjgbDlh7rlipsKICAgICAgICBpZiAoY291bnQgPiAwKSB7CiAgICAgICAgICAgIGlmICghaXNGaXJzdCkgcHJpbnRmKCIgw5cgIik7CiAgICAgICAgICAgIGlmIChjb3VudCA9PSAxKQogICAgICAgICAgICAgICAgcHJpbnRmKCIlZCIsIGRpdmlzb3IpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwcmludGYoIiVkXiVkIiwgZGl2aXNvciwgY291bnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKG4gJSBkaXZpc29yID09IDApIHsKICAgICAgICAvLyDlkIzjgZjlm6DmlbDjgaflibLjgozjgZ/jgonjgqvjgqbjg7Pjg4jjgaDjgZHlopfjgoTjgZkKICAgICAgICBmYWN0b3JpemUobiAvIGRpdmlzb3IsIGRpdmlzb3IsIGNvdW50ICsgMSwgaXNGaXJzdCk7CiAgICB9IGVsc2UgewogICAgICAgIC8vIOS7iuOBvuOBp+OBruWboOaVsOOCkuihqOekugogICAgICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgICAgICAgaWYgKCFpc0ZpcnN0KSBwcmludGYoIiDDlyAiKTsKICAgICAgICAgICAgaWYgKGNvdW50ID09IDEpCiAgICAgICAgICAgICAgICBwcmludGYoIiVkIiwgZGl2aXNvcik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHByaW50ZigiJWReJWQiLCBkaXZpc29yLCBjb3VudCk7CiAgICAgICAgICAgIGlzRmlyc3QgPSAwOwogICAgICAgIH0KICAgICAgICAvLyDmrKHjga7lm6DmlbDjgaflho3luLAKICAgICAgICBmYWN0b3JpemUobiwgZGl2aXNvciArIDEsIDAsIGlzRmlyc3QpOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGludCBuOwoKICAgIHByaW50ZigiM+S7peS4iuOBruaVtOaVsOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhDogIik7CiAgICBzY2FuZigiJWQiLCAmbik7CiAgICAKICAgIHByaW50ZigiJWQg44Gu57Sg5Zug5pWw5YiG6KejOiAiLCBuKTsKICAgIGZhY3Rvcml6ZShuLCAyLCAwLCAxKTsKICAgIHByaW50ZigiXG4iKTsKCiAgICByZXR1cm4gMDsKfQ==