2017-07-10 11 views
-1

this問題ごとに、階乗で階乗の数を計算しようとしています。これまでのところ、私の解決策は次のようになります。階乗から数値の末尾のゼロを効率的に数える

import math 
def zeros(n): 
    return len(str(math.factorial(n))) - len(str(math.factorial(n)).rstrip('0')) 

これは小さな数字に動作しますが、テストの一つは1000000000!あり、そして私のアルゴリズムの効率の悪さは、システムが破損する原因となります。

私は過去にアルゴリズムの効率化に苦労していましたが、この問題に関する一般的なアドバイスと、このアルゴリズムをより効率的にするための具体的な指針を理解できました。

+2

数字の最後にある0の数字は、数字に係数10が現れる回数です。あなたは間違いなく、この質問に答える効率的なアルゴリズムを取得するために、このプロパティを使用する必要があります。 – WNG

+1

[this](http://www.purplemath.com/modules/factzero.htm) –

+0

質問が閉じられたために入力していた回答を投稿してしまったのはちょっと弱いです。私の答えは、プログラムの冗長性を除去することに焦点を当てています(この場合、数学的な削減とは比較できませんが、より一般的なアプローチです)。リンク:https://pastebin.com/4a51WQgZ –

答えて

2

階乗の長さを直接計算するのではなく、代数的な性質を使用するのが最善です。

たとえば、合計を累積するのではなく、2と5の倍数を追跡します。

+1

ファイブで十分です。 – rici

関連する問題