- https://codeforces.com/contest/1228/problem/C
- この問題を解いていて、入力nが1018までなので、long longギリギリまで入力されうる
- pow(p, k)をナイーブに求めたらoverflowするし、modをとると正しく判定できない
- ということで判定関数を作った
- pk > 1018ならoverflowと判定する。そのままpowしたら溢れるのでlogpを取って判定
// 底をpとしたlogp(n) double logp(ll p, ll n){ return log(n) / log(p); } // p^k is overflow ? bool is_overflow(ll p, ll k){ double a = logp(p, 1e18); if(k > a){ return true; }else{ return false; } }
AC Code
https://codeforces.com/contest/1228/submission/61606338
プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?
- 作者: 秋葉拓哉,岩田陽一,北川宜稔
- 出版社/メーカー: マイナビ
- 発売日: 2012/01/28
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 473回
- この商品を含むブログ (36件) を見る