分類: 數論
2013-02-13 15:47
63人閱讀收藏
舉報今天我們來討論如何求:c(n,m)%p
首先如果n,m,p的範圍均為[1,1000],那麼我們完全可以用兩個迴圈搞定,
c(n,m)=(c(n-1,m)%p+c(n-1,m-1)%p)%p。
但是如果n,m,p的範圍均為[1,10^9],另外p為素數,則完全可以用lucas
定理搞定。
如果n,m,p範圍還是[1,10^9],另外p如果為合數,則我們可以先把p分解:
p=p1^a1*p2^a2*...*pk^ak。
問題主要轉化為如何求c(n,m)%(p^c) 其中p為素數。
求完直接合併乙個模方程即可。p^c 的規模大約是10^5。
c 不是1,lucas阻止不了它。
n,m太大,因子分解也阻止不了它。
下面介紹一種好方法:
假設 p = 3, c = 2,也就是mod 9,
假設n = 19,
n! = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * …… * 19
要是可以快速得到 n! 中除掉3 以後 mod 9的結果,那麼多好呀!
看3多討厭,直接砍fac( int n) :
n! = [ 1 * 2 * 4 * 5 * 7 * 8 * … * 16 * 17 * 19 ] * (3 * 6 * 9 * 12 * 15 * 18)=
[ 1 * 2 * 4 * 5 * 7 * 8 * … * 16 * 17* 19 ] * 3^6*( 1 * 2 * 3 * 4 * 5 * 6)
然後發現後面的一坨實際上是 fac( n / p) ,
再看前半部分,尼瑪是以 p^c 為週期的啊!!!
[1 * 2 * 4 * 5 * 7 * 8 ] = [10 * 11 * 13 * 14 * 16 *17 ] = (mod 9),
於是說白了,對於前面的部分,由於週期,都是浮雲了,
下面是 孤立出來的19
可以知道孤立出來的 長度不超過 p^c ,於是暴力啊,暴力啊!
於是完美解決n! 中和 p無關的項 mod p^c的值!!!
接下來是分母部分,一模一樣,無非多了乙個求逆元(因為都和p沒關係了,逆元必
然存在)
我們來分析一下,這樣的複雜度是如何的呢,
每次遞迴,規模變為原來的 1/p,
logp n的啊!!!
當然是層數= =
於是問題完美解決
[cpp]view plain
copy
#include
#define ll long long
ll p,k,r,x,y;
void
extend_euclid(ll a,ll b)
extend_euclid(b,a%b);
ll temp=x;
x=y;
y=temp-(a/b)*y;
} ll quick_mod(ll a,ll b,ll m)
b>>=1;
a=a*a%m;
} return
ans;
} ll multi(ll p,ll k)
ll sum(ll n)
return
ans;
} ll solve(ll n)
ll ret=quick_mod(ans1,n/r,r);
ll x=n-n%r+1;
ll ans2=1;
for(i=x;i<=n;i++)
ret=ret*ans2%r*solve(n/p)%r;
return
ret;
} int
main()
return
0;
}
petr在codeforces上給世界級選手出的10道難題2 :
輸出c(n,k)的最後10位,0<=k<=n<=10^18,n>=1
分類: 數論
2013-02-24 18:15
66人閱讀收藏
舉報題目:ipad,iphone ac大神的題目
對於這個題我們首先得知道二次剩餘的乙個結論,就是如果p為奇素數,a為p的二次剩餘,那麼有a^((p-1)/2)=1(mod p),
如果a為p的二次非剩餘,則a^((p-1)/2)=-1(mod p),如果為非剩餘則答案直接為0,否則前面那兩坨為4,只需考慮後面的,後面的用矩陣構造。
在降冪的時候注意必須是a和b都為p的二次剩餘時才可以,否則就錯誤。還有在p已經為素數的情況下,對於a^bmod p 那麼當b大於p-1時
a^(b%(p-1))%p與a^(b%(p-1)+p-1)%p是一樣的結果。
組合數取模
複習了一下組合數取模,當然推薦檢視acdreamer的部落格啦,寫的確實好啦,自己把裡面的題目全a掉了。include include include include include include include using namespace std typedef long long ll l...
組合數取模
對於c n,m mod p。這裡的n,m,p p為素數 都很大的情況。就不能再用c n,m c n 1,m c n 1,m 1 的公式遞推了。這裡用到lusac定理 for non negative integers m and n and a prime p,the following congr...
組合數取模
組合數c m,n 表示在m個不同的元素中取出n個元素 不要求有序 產生的方案數。定義式 c m,n m n m n 並不會使用latex qaq 根據題目中對組合數的需要,有不同的計算方法。運用乙個數學上的組合恒等式 oi中稱之為楊輝三角 c m,n c m 1,n 1 c m 1,n 證明 1.直...