定理:每乙個大於1的正整數n都可以唯一地寫成素數的乘積,在乘積中的素因子按照非降序排列,正整數n的分解式n=(p1^α1)*(p2^α2)*(p3^α3)* ....... *(pk^αk)稱為n的標準分解式,其中p1,p2,p3......pk是素數,p1<p2<p3.....,且α1,α2,α3.......是正整數。
性質:(1)設d(n)為n的正因子的個數,則有d(n)=(α1+1)*(α2+1)*(α3+1)*......*(αk+1)
//p1可以取0~α1個,有α1
+1種取法,同理p2有α2
+1種取法
(2)設f(n)為n的所有因子之和,則有f(n)=【(p1^α1)-1】/(p1-1) *【(p2^α2)-1】/(p2-1) * ..... *【(pk^αk)-1】/(pk-1)
(3)n! 的素因子分解中的素數p的指數(冪)為【n/p】+【n/p^2】+【n/p^3】+.......
應用1:輸入正整數n,計算 n! 中末尾0的個數
輸入:輸入
乙個正整數n (1≤n≤1 000 000 000)
輸出:輸出 n! 末尾0的個數
樣例輸入:3
樣例輸出:0
253分析:求n的階乘末尾0的個數,即求n的階乘的素因子分解中有多少對(2,5),即求2的指數和5的指數,取其中小的個數(利用性質3可求)
**:
#include #include using namespace std;
int main()
five=5;
s2=0;
while(five<=n)
printf("%d\n",min(s1,s2));
} return 0;
}
補充:對於n!,在因式分解中,因子2的個數大於5的個數,所以如果存在乙個因子5,那麼它必然對應著n!末尾的乙個0。(只求5的指數即可)
應用2:對於給定的素數p,c(2n,n)恰好被p整除多少次?
輸入:輸入n和p,(1≤n,p≤1 000 000 000)
輸出:輸出給出的c(2n,n)被素數p整除的次數,當不能整除時,次數為0。
樣例輸入:2 2
2 3
樣例輸出: 11分析
:
ans=(【2n/p】-2【n/p】)+(【2n/p^2】-2【n/p^2】)+......... +(【2n/p^k】-2【n/p^k】) 其中k=log p(2n)向下取整
**:
#include #include #include using namespace std;
int main()
printf("%d\n",ans);
} return 0;
}
算數基本定理
算數基本定理 符號 a b a整除b a,b a,b最大公約數 a,b a,b最小公倍數 定理1 設p是素數,p a1a2,那麼p a1或p a2至少有乙個成立。一般的,若p a1 ak,則p a1,p ak至少有乙個成立。定理2 設a 1,那麼必有a p1p2 ps 其中pj 1 j s 是素數,...
算術基本定理
例題一 計算n!末尾0的個數 輸入 第一行上有個數字,表示接下來要輸入數字的個數。然後是m行,每行包含乙個確定的正整數n,1 n 1 000 000 000 輸出 對輸入行中每乙個資料n,輸出一行,其內容是n!中末尾0的個數 分析 對於任意乙個正整數,那麼其末尾0必然可以分解成2 5,每乙個0必然和...
算術基本定理
因為畢設要求,需要對這些初等數論的知識學習,做個筆記,以便日後複習。算術基本定理可表述為 任何乙個大於1的自然數 n,如果n不為質數,那麼n可以唯一分解成有限個質數的乘積n n的標準分解式。最早證明是由歐幾里得給出的,現代是由陳述證明。此定理可推廣至更一般的交換代數和代數數論。方法一 先用現代陳述方...