N 分解素因子及若干問題

2022-06-03 18:00:08 字數 943 閱讀 2220

將n!表示成

n! = p1^t1*p2^t2*…pi^ti…*pk^tk(其中p1,p2……pk是素數,1顯然很容易通過素數篩選求出pi,因為1我們先來看一下對於2這個素因子,把n!分成兩部分,即奇偶兩部分

假設n是偶數

n!=1*2*3*4*5……n

=(2*4*6……) * (1*3*5……)

因為有n/2個偶數,所以偶數部分可以提出n/2個2,

=2^(n/2) * (1*2*3*……n/2) * (1*3*5*……)

=2^(n/2) * (n/2)! * (1*3*5*……)

看到了嗎!神奇的事情發生了,n規模的問題轉化成了n/2的問題了。上面假設了n是偶數,當然n是奇數時也是一樣的,只要規定這裡的除法是取整就可以了

於是有遞推公式 f(n,2) = f(n/2,2) + n/2,表示n!中2的個數。

用同樣的方法可以推出 f(n,p) = f(n/p,p) + n/p,表示n!中素數p的個數。

於是有**

int f(int n,int p)

將問題推廣一下:

問題1:n!的末尾有幾個0?

因為 10 = 2*5,所以只要知道n!有多少個2和多少個5,問題就解決了。min(f(n,2),f(n,5)) 顯然f(n,2)>f(n,5),所以問題就轉化成了求f(n,5)。

問題2:n!的轉化成12進製之後,末尾有幾個0?

和問題一樣,12=2*2*3,所以只要求min(f(n,2)/2,f(n,3)),就可以了。

問題3: 求組合數c(n,m)(mod p)

c(n,m)=n!/(m!*(n-m)!) ,只要對分子和分母分別分解素因子,然後因為c(n,m)肯定是整數,所以c(n,m)肯定可以表示成p1^t1*p2^t2*......pi^ti的形式,只要拿分子素因子的冪減去分母對應的素因子的冪即可。好了,後面就簡單了,二分快速冪取模......

n 素因子分解中素數p的冪

n 素因子分解中素數p的冪為 n p n p 2 n p 3 nefu 118 傳送門 從輸入中讀取乙個數n,求出n!中末尾0的個數。輸入有若干行。第一行上有乙個整數m,指明接下來的數字的個數。然後是m行,每一行包含乙個確定的正整數n,1 n 1000000000。對輸入行中的每乙個資料n,輸出一行...

Docker安裝及若干問題解析

按照i春秋的教程我從這個部落格獲得了指導。部落格上已經註明了,下面兩個方式任選其一,我這個呆子兩種方法都試了。重要的文字就應該用其他顏色的筆標出來.全部步驟用完之後,就發現了如下的問題 然後無奈之下開啟了重灌,使用的依然是上面的教程。依然有問題 該問題解決方法 在這之前我參考了另外一篇部落格,換了g...

Mysql資料庫知識點總結及若干問題

併發資料庫事務缺鎖導致的資料不一致情況 丟失更新,髒讀,不可重複讀,幻讀 資料庫隔離級別 詳解 mysql innodb 中意向鎖的作用 redo和undo redo與binlog的區別?binlog用於主從複製用,它記錄了資料庫的所有操作 而redo與undo只是保證server crash後沒有...