求N的階乘所得的數字末尾含有多少個0

2021-08-04 04:18:45 字數 758 閱讀 3378

給定乙個整數n ,那麼n 的階乘n !末尾有多少個0呢?例如:n =10,n !=3 628 800,n !的末尾有兩個0。

初看這樣的題目可能會想到直接求出n!的階乘,然後再計算出0的個數。顯然用這種方法如果n很大的情況下,非常容易溢位。所以我們可以換個角度來分析這個問題。

階乘:

n!=1×2×3×4×5×6×··· ×n

我們可以對n!進行分解質因數 即

普及一下分解質因數:

每個合數都可以寫成幾個質數相乘的形式,其中每個質數都是這個合數的因數,叫做這個合數的分解質因數。 分解質因數只針對合數。

把乙個合數分解成若干個質因數的乘積的形式,即求質因數的過程叫做分解質因數。

分解質因數只針對合數。(分解質因數也稱分解素因數)求乙個數分解質因數,要從最小的質數除起,一直除到結果為質數為止。分解質因數的算式叫短除法,和除法的性質差不多,還可以用來求多個個數的公因式。

因此我們可以寫成:

n!=2^x ×3^y ×5^z ··········

可以看到2和5相乘必然會產生乙個10,而這個10會在階乘的末尾新增乙個0。那麼問題就轉化為2^x ×5^z 可以產生多少個0,即min(x,z),顯然x肯定大於z(能被2整除的數肯定比5多),最終問題轉化為求z的值-即找出1…n能分解出多少個5, 程式如下:

int factorialzero(int n)

}return num;

}

如何求N的階乘所得的數字末尾含有多少個0

原題是這樣 給定乙個整數n 那麼n 的階乘n 末尾有多少個0呢?例如 n 10,n 3 628 800,n 的末尾有兩個0。初看這樣的題目可能會想到直接求出n!的階乘,然後再計算出0的個數。顯然用這種方法如果n很大的情況下,非常容易溢位。所以我們可以換個角度來分析這個問題。n!1 2 3 4 5 6...

求N!末尾所得數字0的個數

題目 給定乙個整數n 那麼n 的階乘n 末尾有多少個0呢?例如 n 10,n 3628800,所以n!末尾就有2個零。分析 如果直接先算出n 階乘,很容易導致記憶體溢位。顯然,直接算出來是不行的。所以,我們可以換乙個角度來分析這個問題。我們知道 n 1 2 3 4 n,所以,我們可以對n!進行分解質...

演算法 階乘 n 求 末尾 0 的個數

最近在網上看到乙個這樣的演算法.就寫了出來.n 末尾有多少個 0 取決於從 1 到 n 的各個數的因子中 2 和 5 的個數。又因為 2 的個數遠遠多於 5 的個數,所以只要求出這當中 5 的個數即可。不斷地用 n 除以 5,直到結果為 0,將中間的結果都加起來,即可得到因子 5 的個數。例如,10...