[AOJ] No. 0384 デュードニー数
問題
方針
各桁の和の最大値は最大でも \( 72 \) なので、\( y \) を決め打ちして考えます。条件を満たす \( y \) について、\( x \) の桁和が \( y \) になるかどうかを調べます。
コード
#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 a, n ,m; cin >> a >> n >> m; string s = to_string(m); ll t = (s.length() - 1) * 9 + s[0] - '0' - 1; if (s[0] == '9') t++; int ans = 0; for (ll i = 1; i <= t; i++) { ll x = my_pow(i + a, n); if (x > m) break; string k = to_string(x); ll d = 0; for (int j = 0; j < k.length(); j++) { d += k[j] - '0'; } if (d == i) ans++; } cout << ans << "\n"; return 0; }
ディスカッション
コメント一覧
まだ、コメントがありません