題意很簡單這裡就不贅述了
這裡主要講一下一些知識點
唯一分解定理,
概念;任意乙個大於0的正整數都能被表示成若干個素數的乘積且表示方法是唯一的;整理可以將相同素數的合併;可以得到
公式————n = p1^a1 * p2^a2 * …………* (p1 < p2 < ……pn);(這就是標準分解式)
但還有乙個關於階乘的分解式
例如;求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這裡;
其餘也是這樣
以上**:
其實也可以理解為從n!取出因子5,小於5就不取,得到n/5個因子5,而後數字變為n/5,也是同型別的問題
#include#include#includeusing namespace std;
int main()
printf("%d\n",ans);}}
return 0;
}
某數階乘的尾數0的個數
1 大數的階乘後尾0的個數,求0的個數,讓我們想到0就是由2,5的乘積組成,這裡我為什麼沒有把10,100 等等,都出來而只單單說只是2,和5的乘積呢,我們先回憶一下,唯一分解定理。2 唯一分解定理,概念 任意乙個大於0的正整數都能被表示成若干個素數的乘積且表示方法是唯一的 整理可以將相同素數的合併...
演算法精練 高次方數的尾數 階乘尾數零的個數
高次方數的尾數 要求 求133的133次方的最後三位數。利用c c 程式進行設計。演算法設計 由於計算機所能表示的整數範圍有限,直接乘的方法顯然是不可能得到正確的結果。但事實上,題目只要求保留後三位,完全沒有必要求出完整結果。因此 通過研究乘法的規律可以發現,乘積的後三位的值只與乘數與被乘數的後三位...
階乘問題(求 階乘最右邊不為 0 的數)
題目提供者評測方式雲端評測標籤usaco高效能 難度普及 提高 時空限制1000ms 128mb 提交 題解 也許你早就知道階乘的含義,n階乘是由1到n相乘而產生,如 12 1 times 2 times 3 times 4 times 5 times 6 times 7 times 8 times...