アルゴリズムと数学089 - Log Inequality 2
解法
式を同値変形すると, \(a < c^{b}\). 桁あふれに注意して冪を計算する. \(a\)より大きいかだけが問題になるので, \(a\)の最大値よりも大きい値は区別する必要がないので, 気持ちとしては \(\infty\) の様にまとめてしまう. 実装では,\(\infty\)の代わりに定数で扱う.
実装
\(c\)の冪を計算するが, \(pow*c \leq inf\) としてしまうと, \(pow\)と\(c\)が \(10^{18}\)に近い場合等に桁あふれが起きる. 代わりに,同値な式 \(pow \leq \lfloor inf/c \rfloor\) で判定する.
注意
1e18 + 5, 1e18 + 10 などは,1e18 となってしまう. 先にキャストしてから和をとり,(ll)1e18 + 5 などで回避できる.
使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"
ll pow(ll c, ll b){
if(c == 1) return 1;
const ll inf = 2e18;
ll pow = 1;
rep(i,b){
if(pow <= inf/c) pow *= c;
else return inf;
}
return pow;
}
int main() {
ll a,b,c; cin >> a >> b >> c;
yesno(a < pow(c,b));
return 0;
}