pku2992(約數,素因子分解)

2021-05-23 03:04:30 字數 502 閱讀 4492

題意:求組合數c[n][k]的約數個數。(0<= k <= n<= 431)

思路:乙個數num的約數個數為cnt,將num質因數分解,得num = p1^a1 * p2^a2 * p3^a3 *……*pn^an.

則約數個數cnt = (a1 + 1) * (a2 + 1) * (a3 + 1) * …… *(an + 1).

c[n][k] = n ! / ((n - k) ! * k !).

先預求1到431的素數表。沒有預處理很容易超時的。

1.約數個數定理:設n的標準質因數分解為n=p1^a1*p2^a2*...*pm^am,

則n的因數個數=(a1+1)*(a2+1)*...*(am+1).

2.n!的素因子 = (n-1)!的素因子 + n的素因子

3.c(n,k)的素因子分解 = n!的素因子- (n-k)!的素因子 - k!的素因子

pku 2992 因子和因子個數的應用

題意是要求c n,k 約數的個數 如果資料不大,我們可以用楊輝三角遞推出來組合數,然後再求約數的個數。但是這道題資料比較大,需要處理一下 1 首先先篩選出440以內的素數 2 然後處理階乘 將階乘素因子分解 因為如果乙個整數能素因子分解為如下形式 s p1 a1 p2 a2 p3 a3 p4 a4 ...

分解素因子

time limit 1500ms memory limit 10000k 有疑問?點這裡 假設x是乙個正整數,它的值不超過65535 即1 x 65535 請編寫乙個程式,將x分解為若干個素數的乘積。輸入的第一行含乙個正整數k 1 k 10 表示測試例的個數,後面緊接著k行,每行對應乙個測試例,包...

素因子分解

每乙個大於1的正整數都可被唯一的寫成素數的乘積。證明過程有點複雜,但是道理還是很容易講通的,因為每個大於1的數都有乙個素因子,因此我們先用最小的素數2分解 如果因數有2的話 直到不能分解時,選用下乙個素數繼續分解。以780為例,此時得到780 2 360,對360還可以進行3次公因數2的提取,得到4...