例題一 計算n!末尾0的個數
輸入:第一行上有個數字,表示接下來要輸入數字的個數。然後是m行,每行包含乙個確定的正整數n,1<=n<=1 000 000 000
輸出:對輸入行中每乙個資料n,輸出一行,其內容是n!中末尾0的個數
分析:對於任意乙個正整數,那麼其末尾0必然可以分解成2*5,每乙個0必然和乙個因子5對應。但乙個0不一定對應著乙個0,因為還需要乙個因子2,才能實現一一對應。
對於你n!,在因式分解中,2的因子個數要大於5的因子個數,所以本題就變成了求n!中因子5的個數。
#include#include#includeusing namespace std;
int main()
cout<
例題二 組合素數
題目大意:給
你兩個整數n和p,求出c(2*n,n)被素數p整數的次數
思路:
由算術基本定理可得到n!被素數p整除的次數。
來看這道題,c(2*n,n) = (2*n)! / (n! * n!)。最終結果就是從(2*n)!能被素數p整除的
次數裡邊減去n!能被素數整除的次數*2。最終結果為:
[2*n/p] + [2*n/p^2] + … + [2*n/p^t] - 2*([n/p] + [n/p^2] + … + [n/p^t])。
其中次數t = logp(2*n),即log10(2*n) / log10(p)。
輸入:第一行是乙個正整數t,表示測試資料的組數,接下來每組兩個數分別是n,p的值,這裡1<=n<=1 000 000 000
輸出:輸出被素數p整除的次數,如果不能被其整除時,輸出0.
#include#include#include#includeusing namespace std;
int main()
cout<
算術基本定理
因為畢設要求,需要對這些初等數論的知識學習,做個筆記,以便日後複習。算術基本定理可表述為 任何乙個大於1的自然數 n,如果n不為質數,那麼n可以唯一分解成有限個質數的乘積n n的標準分解式。最早證明是由歐幾里得給出的,現代是由陳述證明。此定理可推廣至更一般的交換代數和代數數論。方法一 先用現代陳述方...
算術基本定理解析及其應用
本文主要講述了算術基本定理的內容,具體的應用形式,重點結合例題展示如何使用算術基本定理求解問題。算術基本定理 算術基本定理可表述為 任何乙個大於1的自然數 n,如果n不為質數,那麼n可以唯一分解成有限個質數的乘積n p1a1p2a2p3a3.pnan,這裡p1 算術基本定理是初等數論中一條非常基本和...
算術基本定理(唯一分解定理)
每個大於1的正整數n都可以表示成素數之積的形式 n p1 a1 p2 a2 p3 a3.pi代表素數,ai代表指數 d n 是n的正因子的個數 d n a1 1 a2 1 a3 1 sum n 是n的所有因子之和 sum n 1 p1 p1 2 p1 a1 1 p2 p2 2 p2 a2 inclu...