https://atcoder.jp/contests/abc248/tasks/abc248_b
なんということもない問題ですが、ふつうに書くと
def F(A, B, K): for k in count(): if A >= B: return k A *= K
Aを更新するところが気持ち悪いですね。
こういうときは、べき乗を排出するgeneratorを書くとよいです。
# a -> 1, a, a^2, ... def pows(a): n = 1 while True: yield n n *= a def F(A, B, K): for k, p in enumerate(pows(K)): if A * p >= B: return k
Fは1行で書けますね。
def F(A, B, K): return next(k for k, p in enumerate(pows(K)) if A * p >= B)
全体では、
# coding: utf-8 # Slimes from itertools import count #################### library #################### def read_tuple(): return tuple(map(int, raw_input().split())) #################### process #################### def read_input(): A, B, K = read_tuple() return (A, B, K) # a -> 1, a, a^2, ... def pows(a): n = 1 while True: yield n n *= a def F(A, B, K): return next(k for k, p in enumerate(pows(K)) if A * p >= B) #################### main #################### A, B, K = read_input() print F(A, B, K)