0
0

素直にこの通りに解きましたが
これだと、掛け算がオーバーフローしてエラーになる可能性があるそうです。
たしかにそれもそうか。
log2だと天文学的な数値になるとか学生の時に聞いたことがあるし。


N = int(input())
sum = 1
for i in range(1,N+1):
    sum *= i

cnt = 0
while sum > 0:
    if sum % 2 != 0:
        break

    sum //= 2
    cnt += 1

print(cnt)

で、再度見てみると。

たとえば4だとすると
1 * 2 * 3 * 4 は 24で、2で割り切れるのは3回。
要素ごとに2で割れるか調べてみると
1 * 2 * 3 * (2 * 2)
こうなります。2が3個あるので、3回割れることになる。
これを応用すれば良さそうです。


N = int(input())
ans = 0
for i in range(1, N + 1):
    now = i
    #今調べてる数を2で割り切れるまで続ける
    while now % 2 == 0:
        now //= 2
        ans += 1

print(ans)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0