1
0

More than 1 year has passed since last update.

paizaラーニング「階乗の末尾に 0 はいくつ付く? Python3編」

Posted at

私の解答

n = int(input())
ans = 1
for i in range(2,n+1): 
    ans = ans * i
    
div_count = 0
while True:
    if ans % 10 == 0:
        ans //= 10
        div_count += 1
    else:
        break

print(div_count)

前の2種類の問題の解答を組み合わせて作りました。解答例と比べて長すぎますね。

解答例

N = int(input())

count_zero = 0
while N > 0:
    count_zero += N // 5
    N //= 5

print(count_zero)
  • 整数 N を受け取ります。また、末尾の 0 の個数を保持する変数を宣言します。
  • N! の末尾に 0 がいくつ付くのかという問題は、N! が 10 で何回割れるのか、つまり N! を素因数分解すると 2 * 5 がいくつ出てくるのかという問題と同じであると考えられます。
  • また、N! を素因数分解したとき、2 より 5 の方が出てくる頻度は少ないので、5 が何個含まれるのかを数えればよいことになります。

私は、このような考えは全く浮かびませんでした。。。

1
0
1

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
1
0