洛谷 P1313 計算係數(數論,二項式定理)

2021-09-12 07:55:02 字數 2895 閱讀 6063

給定乙個多項式(by

+ax)

k(by+ax)^k

(by+ax

)k,求多項式展開後xn×

ym

x^n \times y^m

xn×y

m項的係數。這個係數可能很大,只需要求出對10007取模後的結果。(0≤

a,b≤

106,

k≤

1000

)(0≤a,b≤10^6, k \leq 1000)

(0≤a,b

≤106

,k≤1

000)

這是一道很簡單的數論題,但我感覺從裡面學到了很多知識。首先就是二項式定理:(x+

y)n=

∑k=0

n(nk

)xn−

ky

k(x+y)^n = \sum\limits_^n x^y^k

(x+y)n

=k=0

∑n​(

kn​)

xn−k

yk。那麼對於xn×

ym

x^n \times y^m

xn×y

m項,只需要套公式就行了,答案為(km

)×am

×b

n\times a^m \times b^n

(mk​)×

am×b

n。對於( km

)(m

k​),由於k

kk比較大,所以我們需要找一種高效的求組合數的方式。如果用楊輝三角感覺複雜度有點高(o(k

2)

o(k^2)

o(k2

))。但是有這樣乙個等式(kn

)=n−

k+1k

(k−1

n)

= \frac

(nk​)=

kn−k

+1​(

nk−1

​),如果我們從(0n

)(n

0​)開始從左到右推可以線性的求出組合數的值。

但是問題又來了,這個演算法計算的時候需要除以k

kk,而除法在模運算下不成立。我們可以利用模運算的逆來解決這個問題。原公式變為(kn

)=(n

−k+1

)(k−

1n)×

k−1m

od

10007

= (n - k +1) \times k^ \mod 10007

(nk​)=

(n−k

+1)(

nk−1

​)×k

−1mo

d100

07。因為模數是質數且大於k

kk,所以一定存在k

kk對於10007的逆元。求逆元的方法就多了,可以用快速冪法,也可以用擴充套件歐幾里得,都是o

(log⁡n

)o(\log n)

o(logn

)的複雜度。至於兩個數的冪,可以使用快速冪輕鬆解決,然後乘起來就是答案了。

o (k

log⁡k+

log⁡n)

o(k\log k + \log n)

o(klogk+

logn

)

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int inf =

2147483647

;const

int inf2 =

0x3f3f3f3f

;const ll inf64 =

1e18

;const

double infd =

1e30

;const

double eps =

1e-6

;const

double pi =

3.1415926

;const ll mod =

1e9;

inline

intread()

while

(isdigit

(ch)

) x =

(x <<3)

+(x <<1)

+(ch ^48)

, ch =

getchar()

;return w ?

-x : x;

}int

quickm

(ll x, ll p,

int mod)

return ans;

}int n, m;

int case;

const

int maxn =

1005

;ll s[maxn]

;int

main()

int xn = s[n]

;int bb =

quickm

(b, m,

10007);

int aa =

quickm

(a, n,

10007);

ll ans =

((ll)xn *

(ll)aa)

%10007

; ans *

=(ll)bb;

ans %

=10007

;printf

("%lld\n"

, ans)

;return0;

}

洛谷P1313 計算係數 數論,數學

求 a x by k a x by k展開式中anb manb m項的係數。眾所周知,x y k x y k展開式中anb manb m項的係數就是楊輝三角第k 1 k 1行m 1m 1列的數字。假定為f n 1 m 1 f n 1 m 1 那麼很明顯,ax by k ax by k展開式中anb ...

數論 洛谷P1313計算係數

給定乙個多項式 by ax k,請求出多項式展開後x n y m 項的係數。輸入格式 輸入檔名為factor.in。共一行,包含5 個整數,分別為 a b k n m,每兩個整數之間用乙個空格隔開。輸出格式 輸出共1 行,包含乙個整數,表示所求的係數,這個係數可能很大,輸出對10007 取模後的結果...

洛谷 P1313 計算係數

題目描述 給定乙個多項式 by ax k,請求出多項式展開後x n y m 項的係數。輸入輸出格式 輸入格式 輸入檔名為factor.in。共一行,包含5 個整數,分別為 a b k n m,每兩個整數之間用乙個空格隔開。輸出格式 輸出共1 行,包含乙個整數,表示所求的係數,這個係數可能很大,輸出對...