hdu 5106 同餘定理 組合數學 快速冪

2021-06-28 14:55:01 字數 637 閱讀 5399

首先要取模,就要用到同餘模定理,具體不細講,只是在中間過程取模,防止溢位

在統計時考慮,逐位進行,因為不考慮數本身,所以每當遇到1時,考慮後面還需要n個1,還剩多少m位,所以就有c(m,n)個數,因為這些數的字首相同,所以最終結果可以通過字首*個數獲得這部分的和,然後考慮每個位上是1的情況是c(m-1,n-1),也就是當前位固定為1,其他位任意選的情況數,那麼他們的和就是(2^(n+1)-1)*c(m-1,n-1),快速冪只是在求冪的時候的優化,也可以提前打好表,效率更高

ac**如下:

#include #include #include #include #define mod 1000000007

#define max 1007

using namespace std;

typedef long long ll;

ll c[max][max];

void init ( )

char s[max];

int n;

ll pow ( ll n )

int main ( )

}ans = ( ans + mod )%mod;

printf ( "%i64d\n" , ans );

}}

hdu 5106 組合數學 找規律

給定n和r,要求算出 0,r 之間所有n onebit數的和,n onebit數是所有數字中1的個數。對於乙個n bit數,可以根據與r最高不同位的位置分成幾類。比如r 100100010,可以分成0 xx,1000 xx,10010000x三類。x處可任取0或者1。x的個數為n,x中1的個數為k。...

組合數學定理收集

唯一分解定理 任意乙個大於1的正整數都能表示成若干個質數的乘積,且表示的方法是唯一的。換句話說,乙個數能被唯一地分解成質因數的乘積。即 n p1 a1 p2 a2 p3 a3 pn an 其中p1,p2.pn為素數。實現 include include using namespace std con...

stone 組合數學 Lucas定理

傳送門解題思路 第i組的人數必須大於ci,於是我們可以將問題轉化為 n sum m ci 人分到m組中,且保證每一組的人數大於0,然後我們可以使用隔板法求出分的的組數 c m ci 我們可以直接通過基本的組合公式 費馬小定理直接求,也可以通過lucas定理求得 直接求 code includeusi...