AtCoder ABC 048 B – Between a and b … Python解説

2021年11月21日

スポンサーリンク

Between a and b …

問題文

非負の整数 ab (a ≤ b) と、正の整数 xが与えられます。 a以上  b以下の整数のうち、xで割り切れるものの個数を求めてください。

AtCoder株式会社 AtCoder Beginner Contest 048

この問題、0<=a<=b<=10^18とかなり入力値が大きくなるので、xで割り切れる数をループを使って調べることができません。

というわけで、aとbそれぞれをxで割って、差を取ることにします。

a, b, x = map(int, input().split())

if a == 0:
    print((b // x) - (a // x) + 1)

elif a % x == 0:
    print((b // x) - (a // x) + 1)
    
else:
    print((b // x) - (a // x))
    

見てもらうと分かるように、いくつかの例外処理があります。まず、aが0だった場合、0もxで割り切れる数に入ってくるため、計算結果に+1しています。

もうひとつ、aがxで割り切れる数のときは差を取るときに-1になってしまうので、計算結果を+1しています。