某數階乘的尾數0的個數

2021-07-11 05:24:07 字數 1350 閱讀 2738

1;大數的階乘後尾0的個數,求0的個數,讓我們想到0就是由2,5的乘積組成,這裡我為什麼沒有把10,100~~~等等,都出來而只單單說只是2,和5的乘積呢,我們先回憶一下,唯一分解定理。

2;唯一分解定理,

概念;任意乙個大於0的正整數都能被表示成若干個素數的乘積且表示方法是唯一的;整理可以將相同素數的合併;可以得到

公式————n = p1^a1 * p2^a2 * …………* (p1 < p2 < ……pn);(這就是標準分解式)

3;然而這是乙個數的階乘與我們這題求某個數階乘沒什麼關係啊,

確實普通的唯一分解定理在這題中確實沒有什麼關係的,但是唯一分解定理也可以拓展,也就是標準式的另外一種形式,與階乘有關的,

4;標準分解式的另外一種寫法;

例如;求29階乘的標準分解式;

不超過29的素數有哪些;2,3,5,7,11,13,17,19,23,29;

就這麼多了,然後我們要做什麼呢,才可以求出29階乘的標準分解式;就是要求出這些素數的冪是好多;

2(29!)//讓它表示29階乘的標準分解式中素數2的冪;其餘類似;

先解釋一下[a]是什麼意思,表示小於a的最大整數;

2(29!) = [29/2^1]+[29/2^2]+[29/2^3]+[29/2^4]

= 14+7+3+1=25;

25就表示29階乘的分解式中素數2的個數;

應該有人有疑問,為什麼只加到29/2^4不在繼續加呢,這裡有什麼特殊的,只加到這裡。當然有特殊的29/2^4=1;如果繼續加也是0啊;因此就加到[29/2^x]==1這裡;

其餘也是這樣

3(29!)= [29/3^1]+[29/3^2]+[29/3^3]=13;

其餘都是這樣的套路可以算出標準式中小於等於29的素數的個數

可以得出;

29!= 2^25 * 3^13 * 5^6 * 7^4 * 11^2 * 13^2 * 17^1 * 19^1 * 23^1 *29^1;這就是拓展唯一分解定理得到的結果;

我們已經把29!的分解式已經求出來了,我們現在可以看出29!尾數0的個數嗎;答案就是6;

5;慢慢的就開始於題目有關了吧;最開始就說過尾數0都是由2和5組成的。意思就是說我們只要把這個數階乘的拓展標準分解式中2和5的個數求出來,那麼0的個數就是2和5個數中小的那個;

是不是突然間恍然大悟了;

然而就可以敲**了;如何把演算法**化就要看現在了;

#include

#include

int main()

kk = n/5;

while(kk != 0)

if(sum2 < sum5)

elseprintf("%d\n",sum5);

}return 0;}

poj1041(某數階乘尾數0的個數)

題意很簡單這裡就不贅述了 這裡主要講一下一些知識點 唯一分解定理,概念 任意乙個大於0的正整數都能被表示成若干個素數的乘積且表示方法是唯一的 整理可以將相同素數的合併 可以得到 公式 n p1 a1 p2 a2 p1 p2 pn 這就是標準分解式 但還有乙個關於階乘的分解式 例如 求29階乘的標準分...

階乘尾數零的個數

100 的尾數有多少個零?為了解決這個問題,必須首先從數學上分析在100 結果值的末尾產生零的條件。不難看出 乙個整數若含有乙個因子5,則必然會在求100 時產生乙個零。因此問題轉化為求1到100這100個整數中包含了多少個因子5。程式說明與注釋 include int main printf th...

演算法精練 高次方數的尾數 階乘尾數零的個數

高次方數的尾數 要求 求133的133次方的最後三位數。利用c c 程式進行設計。演算法設計 由於計算機所能表示的整數範圍有限,直接乘的方法顯然是不可能得到正確的結果。但事實上,題目只要求保留後三位,完全沒有必要求出完整結果。因此 通過研究乘法的規律可以發現,乘積的後三位的值只與乘數與被乘數的後三位...