[AtCoder] ARC 106 A – 106

2020年12月12日

問題

方針

指数の発散は早いので、\( A, B \) を全探索します。また、オーバーフローに注意します。

コード

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

// 累乗
ll my_pow(ll x, ll n) {
    if (n == 0) return 1;
    if (n % 2 == 0) return my_pow(x * x, n / 2);
    return x * my_pow(x, n - 1);
}

int main() {
    ll N;
    cin >> N;
    for (int i = 1; i < 100; i++) {
        ll k = my_pow(3, i);
        if (k > N) break;
        for (int j = 1; j < 100; j++) {
            ll s = my_pow(5, j);
            if (s > N) break;
            if (N == k + s) {
                cout << i << " " << j << "\n";
                return 0;
            }
        }
    }
    cout << "-1\n";
    return 0;
}