Lucas定理|[BZOJ 1951] 古代猪文【Lucas定理/费马小定理/中国剩余定理/扩展欧几里得】
[Description] 求
文章图片
[Solution]
容易得到,
文章图片
所以,重点在怎么求
文章图片
如果是p-1是个质数,我们可以用sqrt(n)的时间枚举所有d,用Lucas定理分别计算求和即可。
但是我们发现p-1=2*3*4679*35617,并不是一个质数,所以Lucas定理不能用了吗?并不,我们可以算出这个合式分别对2、3、4679、35617的模值,写出四个同余方程,再用孙子定理求解即可。注意特判g==p的情况,此时费马小定理不成立,ans=0.
【Lucas定理|[BZOJ 1951] 古代猪文【Lucas定理/费马小定理/中国剩余定理/扩展欧几里得】】[Code]
#include
#includetypedef long long ll;
const int mod=999911659;
ll prime[4]={2,3,4679,35617};
ll num[4],inver[4];
void exgcd(ll x,ll y,ll&a,ll&b){
if(!y) a=1,b=0;
else{ exgcd(y,x%y,b,a);
b-=a*(x/y);
}
}ll pow(ll a,ll n,int p){
ll ans=1;
while(n){
if(n&1) ans=ans*a%p;
a=a*a%p;
n>>=1;
}
return ans;
}ll C(ll m,ll n,ll p){
if(mm-n) n=m-n;
ll ans=1,cm=1,cn=1;
for(ll i=0;
i
推荐阅读
- 一篇文章搞清楚什么是分布式系统|一篇文章搞清楚什么是分布式系统 CAP 定理
- 雷诺运输定理笔记
- 【BZOJ】4316:|【BZOJ】4316: 小C的独立集 静态仙人掌
- 当我真正理解了扩展欧几里得定理
- 类欧几里得算法|[类欧几里得算法 数论] BZOJ 2987 Earthquake
- 线段树|[类欧几里得算法 线段树] BZOJ 1938 [CROATIAN2010] ALADIN
- bzoj|Bzoj3817:Sum
- 验证尼科彻斯定理
- 任何一个整数的平方都可以写成一串连续奇数的和,编程验证该定理;
- BZOJ|BZOJ2763[JLOI2011]飞行路线【分层图最短路】