數論 組合數 盧卡斯定理

2021-10-18 13:24:17 字數 3024 閱讀 1828

使用遞推式cab

=ca−

1b+c

a−1b

−1

c_a^b=c_^b+c_^

cab​=c

a−1b

​+ca

−1b−

1​求解階乘%1e9+7

t =1

05

t=10^5

t=1051≤b

≤a

≤2000

1\leq b\leq a\leq 2000

1≤b≤a≤

2000

#

include

using

namespace std;

int c[

2010][

2010];

const

int mod=

1e9+7;

void

init()

intmain()

}

t=1

05

t=10^5

t=1051≤b

≤a≤1

05

1\leq b\leq a\leq 10^5

1≤b≤a≤

105階乘%1e9+7

使用公式cab

=a!(

a−b)

!⋅b!

c_a^b=\frac

cab​=(

a−b)

!⋅b!

a!​預處理階乘,使用快速冪預處理階乘的逆元

#

include

using

namespace std;

#define

lllong

long

int fact[

100010

],infact[

100010];

//fact 階乘,infact 逆元的階乘

const

int mod =

1e9+7;

intqmi

(int a,

int k,

int p)

return res;

}int

main()

int t;cin>> t;

while

(t--

)return0;

}

求cab

modp

c_a^b \mod p

cab​mo

dpt =20

t=20

t=20

1 ≤b

≤a≤1

018,1

≤p≤1

05且p

為質

數1\leq b\leq a\leq 10^,1\leq p \leq 10^5且p為質數

1≤b≤a≤

1018

,1≤p

≤105

且p為質

盧卡斯定理(lucas)

c ab

≡cam

odpb

modp

+ca/

pb/p

modp

c_a^b\equiv c_^+c_^ \mod p

cab​≡c

amod

pbmo

dp​+

ca/p

b/p​

modp

#

include

#include

using

namespace std;

typedef

long

long ll;

intqmi

(int a,

int k,

int p)

return res;

}intc(

int a,

int b,

int p)

return res;

}int

lucas

(ll a, ll b,

int p)

intmain()

return0;

}

高精度組合數

#

include

using

namespace std;

const

int n =

5010

;int primes[n]

, cnt;

int sum[n]

;bool st[n]

;void

get_primes

(int n)}}

intget

(int n,

int p)

return res;

}vector<

int>

mul(vector<

int> a,

int b)

while

(t)return c;

}int

main()

vector<

int> res;

res.

push_back(1

);for(

int i =

0; i < cnt; i ++

)for

(int j =

0; j < sum[i]

; j ++

) res =

mul(res, primes[i]);

for(

int i = res.

size()

-1; i >=

0; i --

)printf

("%d"

, res[i]);

puts(""

);return0;

}

組合數取模(盧卡斯定理)

組合數取模 盧卡斯定理 模板 const int n 1e5 5 const int mod 10007 ll fac n 用於求取階乘取模 ll n void init ll quick pow ll a,ll b return ans ll c ll n,ll m ll lucas ll n,l...

盧卡斯 Lucas 定理 逆元 求組合數

參考文章 lucas定理是用來求 c n,m mod p,p為素數的值。lucas定理 我們令n sp q m tp r.q r p 那麼 在程式設計時你只要繼續對 呼叫lucas定理即可。可以遞迴的去完成這個過程,其中遞迴終點為t 0 時間o logp n p ll lucas ll a,ll b...

演算法題 盧卡斯定理求組合數(Python)

給定n組詢問,每組詢問給定三個整數a,b,p,其中pp是質數,請你輸出cba mod p的值。輸入格式 第一行包含整數n。接下來n行,每行包含一組a,b,p。輸出格式 共n行,每行輸出乙個詢問的解。資料範圍 1 n 20 1 b a 10 18 1 p 10 5 輸入樣例 3 5 3 7 3 1 5...