CPC23-4-K. 喵喵的神數 (數論 Lucas定理)
阿新 • • 發佈:2017-07-27
names 什麽 popu ret pac _id memory rac ext
喵喵的神?數
Time Limit: 1 Sec Memory Limit: 128 MB
Description
喵喵對組合數比較感興趣,而且對計算組合數很在行。
Input
輸入第一行是一個整數N(N<=1000)。
接下來N行,每行包含一個正整數T和一個質數P(1<=P<=T<231)。
Output
包含N行,依據輸入的順序。每一行為一個整數:
Sample Input
2
3 2
10 3
Sample Output
1
0
HINT
Source
CPC3
數論Lucas定理是用來求 c(n,m) mod p的值,p是素數(從n取m組合。模上p)。
描寫敘述為:
Lucas(n,m,p)=cm(n%p,m%p)* Lucas(n/p,m/p,p)
Lucas(x,0,p)=1;
本題中,讓求的是,所以。n = p, 代入得 Lucas(n,m,p) = cm(n%p, m%p)* Lucas(n/p,
m/p, p)
= cm(n%p, p%p)* Lucas(n/p,
p/p, p)
=
cm(n%p, 0)* Lucas(n/p, 1, p)
= 1 * Lucas(n/p, 1, p)
= C(n/p, 1) % p
= C(n/p, 1) % p
= ( n/p ) % p
AC代碼:
Description
喵喵對組合數比較感興趣,而且對計算組合數很在行。
同一時候為了追求有後宮的素養的生活,喵喵每天都要研究
質數。
我們先來復習一下什麽叫做組合數。對於正整數P、T
然後我們再來復習一下什麽叫質數。質數就是素數,假設說正整數N的約數僅僅有1和它本身,N就是質數;另外。
1不是質數。
今天,喵喵想要知道
Input
輸入第一行是一個整數N(N<=1000)。
接下來N行,每行包含一個正整數T和一個質數P(1<=P<=T<231)。
Output
包含N行,依據輸入的順序。每一行為一個整數:
Sample Input
2
3 2
10 3
Sample Output
1
0
HINT
Source
CPC3
解題思路:
這題是純數學題,唉,數學就是硬傷啊!
搞了半天。沒有結果。果斷百度了一下,結果搜到了不明覺歷的Lucas定理,據說是專門解決C(n, m)%p的,當中p是質數。
Lucas定理敘述例如以下:
AC代碼:
#include <iostream> #include <cstdio> using namespace std; int main(){ freopen("in.txt", "r", stdin); int n, t, p; cin >> n; while(n--){ cin >> t >> p; cout << (t / p) % p << endl; } return 0; }
CPC23-4-K. 喵喵的神數 (數論 Lucas定理)