FHJ學長的心願 QDUOJ 數論

2022-03-16 22:17:30 字數 994 閱讀 1886

原題鏈結,點我進去

給你乙個數n,讓你求在$$c^ \ c_ c\ \dots \ c^_$$中有幾個組合數是奇數。

出題人cx學長給的題解:

本題實際上是考察的lucas定理。

lucas定理:(寫程式的時候後半部分可以遞迴求)

設\(p\)為素數,則:

\[c^_(\% p)=c^_∗c^_(\%p)

\]一句話概括,就是乙個組合數可以拆成\(p\)進製下的乘積,如下:(與上式本質相同)

\[n = n_*p^+n_*p^+...+n_*p+n_0

\]\[m = m_*p^+m_*p^+...+m_*p+m_0

\]則(上式實際上也就是把\(n,m\)分解成了\(p\)進製的形式):

\[c^_(\% p)=c^}_}∗c^}_}*...*c^}_}(\%p)

\]當\(p = 2\)的時候,其實就只有四種情況:\(,,,,,c_1^0, c_0^1, c_0^0, c_1^1\),其中只有\(c_0^1 =0\),其餘都是1。

那麼對於這個題,我們實際上要找的就是在\(c_n^0...c_n^n\)中有多少個 \(c_n^m\)滿足\(c_n^m\%2=1\)。

對於給定的\(n\),我們去考慮\(m\),如果對應\(n\)的二進位制位為0,那麼\(m\)對應的二進位制位只能為0(因為\(c_0^1 =0\)),如果對應\(n\)的二進位制位為1,那麼\(m\)對應的二進位制位可以為1也可以為0。(這樣也保證了統計的\(m\leq n\))。

所以答案就是n的二進位制中1的位置取0或1的所有可能。即\(2^\),\(cnt\)為\(n\)的二進位制中1的個數。

這個題有人竟然通過找規律找出來的,真強。

#include using namespace std;

int main()

printf("%d\n", 1 << cnt);

}return 0;

}

遊騎兵的心願

今天,把以前剛剛接觸程式設計時寫下的東西,從iteye搬到了csdn上。回憶,這種東西,有時候,像潮水,一波接著一波,怎麼也止不住。如部落格左上角的名字,你可以看見,我是乙個遊騎兵。乙個沒有歸屬感,沒有榮譽感的騎士,我只是不斷遊蕩,像電影中的無頭騎士一樣。遊騎兵不喜歡麻煩別人,他享受孤獨。也習慣了一...

1956 貧窮的學長

這不雙十一過去了,學長lele徹底貧窮了,錢都用來清理他的購物車了,於是他決定幫別人送外賣來掙點外塊。送外賣的地點都比較集中,飯店位於山頂,但是他又特別懶,想著怎麼樣送外賣他最省力氣。結合座標軸,我們假定飯店位於原點 0,0 送外賣的地點都位於第一象限的位置 不會出現位於 x 軸上的地點 因為回飯店...

NYOJ B CTX學長的01串

想ak,必須過了我這一關 偷笑 給你乙個01字串只包括字元0和1 例如 0101010101010011010 現在ctx學長想要考考你們,這個01串中有多少的子串行。子串行的定義是這樣的,可以在01串中找一些字元 不能改變字元的順序 組成乙個新的串,例如01,你可以找到的子串行是 0 1 01 例...