bzoj 1951: [Sdoi2010]古代猪文

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cmath>
 5 #define ll long long
 6 #define mul 999911659
 7 using namespace std;
 8 int n,g,a[4];
 9 int sh[4]={2,3,4679,35617},C1[4][35618];
10 void exgcd(int a1,int a2,int &x,int &y)
11 {
12     if(!a2)
13       {
14         x=1;
15         y=0;
16         return;
17       }
18     exgcd(a2,a1%a2,x,y);
19     int t=x;
20     x=y;
21     y=t-a1/a2*y;
22 }
23 int kuai(ll n,int k,int p)
24 {
25     int ans=1;
26     for(;k;)
27       {
28         if(k%2)
29           ans=(ans*n)%p;
30         n=(n*n)%p;
31         k/=2;
32       }
33     return ans;
34 }
35 int C(int n,int m,int p)
36 {
37     if(n<m)
38       return 0;
39     return C1[p][n]*kuai(C1[p][m]*C1[p][n-m],sh[p]-2,sh[p])%sh[p];
40 }
41 int lucas(int n,int m,int p)
42 {
43     if(!m)
44       return 1;
45     return (C(n%sh[p],m%sh[p],p)*lucas(n/sh[p],m/sh[p],p))%sh[p];
46 }
47 int solve()
48 {
49     int x,y,a1,b1,a2,b2;
50     a1=sh[0];
51     b1=a[0];
52     for(int i=1;i<4;i++)
53       {
54         a2=sh[i];
55         b2=a[i];
56         exgcd(a1,a2,x,y);
57         x=((b2-b1)*x%a2+a2)%a2;
58         b1=b1+x*a1;
59         a1=a1*a2;
60       }
61     return b1;
62 }
63 int main()
64 {
65     scanf("%d%d",&n,&g);
66     if(g==mul)
67       {
68         printf("0\n");
69         return 0;
70       }
71     for(int i=0;i<4;i++)
72       {
73         C1[i][0]=1;
74         for(int j=1;j<=sh[i];j++)
75           C1[i][j]=(C1[i][j-1]*j)%sh[i];
76       }
77     for(int i=1;i<=sqrt(n);i++)
78       if(n%i==0)
79         {
80             for(int j=0;j<4;j++)
81               {
82                 a[j]=(a[j]+lucas(n,i,j))%sh[j];
83                 if(i!=n/i)
84                   a[j]=(a[j]+lucas(n,n/i,j))%sh[j];
85               }
86         }
87     printf("%d\n",kuai(g,solve(),mul));
88     return 0;
89 }

经典的数学题。。。。

题目就有点难懂,求G^M mod P  M=∑ i|N C(N,i)  P=999911659

用lucas定理,中国剩余定理合并模线性方程组。http://hzwer.com/4407.html

时间: 2024-10-10 20:37:12

bzoj 1951: [Sdoi2010]古代猪文的相关文章

bzoj 1951 [Sdoi2010]古代猪文(数论知识)

Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔下的大家想象中的桃花源了.猪

[BZOJ 1951][Sdoi2010]古代猪文(Lucas+CRT+费马小定理)

Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔下的大家想象中的桃花源了.猪

BZOJ 1951 SDOI2010 古代猪文 数论 Lucas定理

题目大意:给定N,G,求 首先由欧拉定理易知当A与p互质时A^B %p=A^(B%φ(p) ) %p 这里p是一个质数 于是φ(p)=p-1=999911658 然后由于这个数不是质数 难以处理 我们将它分解质因数 然后对于每个质因数的解用中国剩余定理合并即可 然后就是999911658有一个很好的性质 999911658=2*3*4679*35617 每个质因数的次数都是1次 于是我们可以套用卢卡斯定理 预先处理出对于每个质因数的阶乘和阶乘的逆元即可 注意此题有个细节 就是欧拉定理中a与p必须

bzoj 1951: [Sdoi2010]古代猪文 【中国剩余定理+欧拉定理+组合数学+卢卡斯定理】

首先化简,题目要求的是 \[ G^{\sum_{i|n}C_{n}^{i}}\%p \] 对于乘方形式快速幂就行了,因为p是质数,所以可以用欧拉定理 \[ G^{\sum_{i|n}C_{n}^{i}\%\varphi(p)} \] \[ G^{\sum_{i|n}C_{n}^{i}\%p-1} \] 因为p-1不是质数,所以把它质因数分解为2,3,4679,35617,最后用中国剩余定理合并即可. #include<iostream> #include<cstdio> using

1951: [Sdoi2010]古代猪文

1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2171  Solved: 904[Submit][Status][Discuss] Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时

【BZOJ】1951[Sdoi2010]古代猪文

[算法]欧拉定理+组合数取模(lucas)+中国剩余定理(CRT) [题解]给定G,N 先考虑简化幂运算,因为模数为素数,由欧拉定理可知G^k=G^(k%φ(p)) mod p,显然G^(k%φ(p)) mod p可以用快速幂求解 此时观察到2p>max(n)>p,所以可能n=p,此时不满足n,p互素,答案直接为0. 对于幂取模部分,因为p是素数,φ(p)=p-1,p-1=999911658=2*3*4679*35617. 由于lucas定理要求p为素数,所以用套路:分开求解后用中国剩余定理合

1951: [Sdoi2010]古代猪文|数论大合集

做这个题大概需要直到以下姿势:快速幂,费马小定理,卢卡斯定理,中国剩余定理.(大概也就这些 题目大概是让求 g∑d|nCdnmodp 然后根据费马小定理原式 =g∑d|nCdnmod(p?1)modp 然后也就是要求指数上的这个东西 ∑d|nCdnmod(p?1) 然后p?1还不是质数..需要分解成质因子然后用中国剩余定理合并,然后还要求组合数还要卢卡斯定理,最后特判一下g=p的情况 #include<algorithm> #include<iostream> #include&l

P2480 [SDOI2010]古代猪文

P2480 [SDOI2010]古代猪文 题目背景 “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔

【BZOJ 1951】 [Sdoi2010]古代猪文

Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边海的那边的某片风水宝地曾经存在过一个猪王国.猪王国地理位置偏僻,实施的是适应当时社会的自给自足的庄园经济,很少与外界联系,商贸活动就更少了.因此也很少有其他动物知道这样一个王国. 猪王国虽然不大,但是土地肥沃,屋舍俨然.如果一定要拿什么与之相比的话,那就只能是东晋陶渊明笔下的大家想象中的桃花源了.猪