素直に for
文で探索すればよいのだけど、意外と A
をどこまで探索すればいいのかの判断も難しくて、戸惑った人も多いかもしれない。
問題概要
正の整数 が与えられる。
となる正の整数 を求めよ。存在しない場合は -1 を出力せよ。
制約
考えたこと
基本的には、for
文を用いて と見ていって、 が になるかどうかを調べればよい。
問題なのは をどこまで調べればよいかだが、実践的には「 が を超えてしまったら探索を打ち切る」というようにするのが分かりやすいと思う。
#include <bits/stdc++.h> using namespace std; int main() { long long B; cin >> B; for (long long A = 1;; ++A) { // A^A を求める long long val = 1; for (long long i = 0; i < A; ++i) val *= A; if (val == B) { // B に一致すれば答え cout << A << endl; return 0; } else if (val > B) { // B を超えたら打ち切る cout << -1 << endl; return 0; } } }