标签:style blog http color ar os for sp div
第一类时mod为素数
1 typedef long long LL; 2 3 LL n,m,p; 4 5 LL quick_mod(LL a, LL b) 6 { 7 LL ans = 1; 8 a %= p; 9 while(b) 10 { 11 if(b & 1) 12 { 13 ans = ans * a % p; 14 b--; 15 } 16 b >>= 1; 17 a = a * a % p; 18 } 19 return ans; 20 } 21 22 LL C(LL n, LL m) 23 { 24 if(m > n) return 0; 25 LL ans = 1; 26 for(int i=1; i<=m; i++) 27 { 28 LL a = (n + i - m) % p; 29 LL b = i % p; 30 ans = ans * (a * quick_mod(b, p-2) % p) % p; 31 } 32 return ans; 33 } 34 35 LL Lucas(LL n, LL m) 36 { 37 if(m == 0) return 1; 38 return C(n % p, m % p) * Lucas(n / p, m / p) % p; 39 }
1 typedef long long LL; 2 const int N = 200005; 3 4 bool prime[N]; 5 int p[N]; 6 int cnt; 7 8 void isprime() 9 { 10 cnt = 0; 11 memset(prime,true,sizeof(prime)); 12 for(int i=2; i<N; i++) 13 { 14 if(prime[i]) 15 { 16 p[cnt++] = i; 17 for(int j=i+i; j<N; j+=i) 18 prime[j] = false; 19 } 20 } 21 } 22 23 LL quick_mod(LL a,LL b,LL m) 24 { 25 LL ans = 1; 26 a %= m; 27 while(b) 28 { 29 if(b & 1) 30 { 31 ans = ans * a % m; 32 b--; 33 } 34 b >>= 1; 35 a = a * a % m; 36 } 37 return ans; 38 } 39 40 LL Work(LL n,LL p) 41 { 42 LL ans = 0; 43 while(n) 44 { 45 ans += n / p; 46 n /= p; 47 } 48 return ans; 49 } 50 51 LL Solve(LL n,LL m,LL P) 52 { 53 LL ans = 1; 54 for(int i=0; i<cnt && p[i]<=n; i++) 55 { 56 LL x = Work(n, p[i]); 57 LL y = Work(n - m, p[i]); 58 LL z = Work(m, p[i]); 59 x -= (y + z); 60 ans *= quick_mod(p[i],x,P); 61 ans %= P; 62 } 63 return ans; 64 } 65 66 int main() 67 { 68 int T; 69 isprime(); 70 cin>>T; 71 while(T--) 72 { 73 LL n,m,P; 74 cin>>n>>m>>P; 75 n += m - 2; 76 m--; 77 cout<<Solve(n,m,P)<<endl; 78 } 79 return 0; 80 }
标签:style blog http color ar os for sp div
原文地址:http://www.cnblogs.com/zhanzhao/p/4077001.html