質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.54%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1242閲覧

Nの階乗の末尾に0が何個付くか?という問題の考え方

uragirionigiri

総合スコア8

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/03/18 21:57

前提 

入力値は整数Nとする。

発生している問題

1つ目のコードで問題は解いたのですが2つ目のコードが解答として載っており、このコードの考え方が理解できません。 分かりやすく教えていただけないでしょうか?

該当のソースコード

python

1N = int(input()) 2num = 1 3 4for i in range(1,N+1): 5 num *= i 6zero = 0 7 8while True: 9 if num % 10 == 0: 10 num //= 10 11 zero += 1 12 else: 13 break 14print(zero)

python

1N = int(input()) 2 3count_zero = 0 4while N > 0: 5 count_zero += N // 5 6 N //= 5 7 8print(count_zero)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xebme

2023/03/18 22:21 編集

10 = 2 X 5です。2の個数は不要。5の個数だけ。なぜか。
quickquip

2023/03/18 23:11

数学の問題として出たとしたら、解けますか? 「数学の問題としてならわかるけれどコードとして理解できない」か「数学の問題として理解できない」かで、答えることが変わります。
guest

回答1

4

ベストアンサー

ある数の末尾に0が何個つくか、というのは
10で何回割れるかです。
10で何回割れるかというのは、「ある数」を素因数分解して、2と5のペアが何個あるかで、
さらに言い換えると、2と5のうち少ない方の個数です。

「ある数」がNの階乗のときは、1,2,3,...,Nをそれぞれ素因数分解したときに、2と5のそれぞれの合計のうち少ない方の個数です

少ない方はどっちかを考えると、
1からNまで5の倍数は5個おきに出現しますが、2の倍数は2個おきです。なので5のほうが少ないです。

なので5の数を数えればいいことになります。

で、1からNまでの素因数に5が何個あるかの数え方ですが、
解答例では5の倍数の個数、25の倍数、125の倍数、…の合計を数えています。

とりあえず5の倍数の個数を考えると
5個おきに出現するので N//5 個になります。
次に25の倍数ですが、これは先程のN//5個の中から5個おきに出現します。(分かりにくかったら適当にN=50とかを思い浮かべてください)

125以降も結局同じ手順になりますので、
解答例のコードで5の個数を数えられます。

投稿2023/03/18 22:46

編集2023/03/19 06:31
ozwk

総合スコア13502

Zuishin, TakaiY, can110, uragirionigiri👍を押しています

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2023/03/19 03:01

明快な解説で、全くその通りなのですが、なぜ質問のコードで 5 の数が数えられるのかわからないという問題もありそうです。
ozwk

2023/03/19 06:33

全くその通りなので足しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.54%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

同じタグがついた質問を見る

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。