题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951

题意就是要求 G^( ∑(k|n) C(n,k) ) % p,用费马小定理处理指数,卢卡斯定理处理大组合数,取模用中国剩余定理合并;

好想难写的感觉(其实也不难写?);

关于中国剩余定理,可以看这篇博客:https://www.cnblogs.com/MashiroSky/p/5918158.html

第一次写中国剩余定理合并模数,还有一点好不容易理解的地方,写在注释里。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
ll n,g,p=,t[]={,,,},r[],fac[][];
ll pw(ll a,int b,int mod)
{
// a%=mod;//可有可无
ll ret=;
for(;b;b>>=,(a*=a)%=mod)
if(b&) (ret*=a)%=mod;
return ret;
}
ll C(int n,int m,int k)
{
if(n<m)return ;
return (fac[k][n]*pw(fac[k][m]*fac[k][n-m],t[k]-,t[k]))%t[k];
}
ll Lucas(ll n,ll m,int k)
{
if(m==)return ;//!
return (C(n%t[k],m%t[k],k)*Lucas(n/t[k],m/t[k],k))%t[k];
}
void exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==){x=; y=; return;}
exgcd(b,a%b,x,y);
ll t=x; x=y; y=t-a/b*y;
}
int CRT()
{
ll M=t[],R=r[],x,y;
for(int i=;i<;i++)
{
exgcd(M,t[i],x,y);
x=((r[i]-R)%t[i]*x%t[i]+t[i])%t[i];//%t[i]!(CRT取通解方法) //不能是R-r[i]!因为求到的x对于r[i]-R来说是正的,否则需要取一下负
R+=M*x;
M*=t[i];
}
return R;
}
int main()
{
scanf("%lld%lld",&n,&g);
if(g==p)//!!!
{
printf(""); return ;
}
for(int i=;i<;i++)
{
fac[i][]=;
for(int j=;j<=t[i];j++)
fac[i][j]=(fac[i][j-]*j)%t[i];
}
for(int j=;j<;j++)
for(int i=;i*i<=n;i++)//
if(n%i==)
{
(r[j]+=Lucas(n,i,j))%=t[j];
if(i*i!=n) (r[j]+=Lucas(n,n/i,j))%=t[j];
}
int ans=CRT();
printf("%lld",pw(g,ans,p));
return ;
}

bzoj1951 [Sdoi2010]古代猪文 ——数论综合的更多相关文章

  1. 【bzoj1951】: [Sdoi2010]古代猪文 数论-中国剩余定理-Lucas定理

    [bzoj1951]: [Sdoi2010]古代猪文 因为999911659是个素数 欧拉定理得 然后指数上中国剩余定理 然后分别lucas定理就好了 注意G==P的时候的特判 /* http://w ...

  2. BZOJ 1951: [Sdoi2010]古代猪文( 数论 )

    显然答案是G^∑C(d,N)(d|N).O(N^0.5)枚举N的约数.取模的数999911659是质数, 考虑欧拉定理a^phi(p)=1(mod p)(a与p互质), 那么a^t mod p = a ...

  3. [bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT

    Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...

  4. BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)

    Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...

  5. BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】

    题目 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那 ...

  6. BZOJ1951[SDOI2010]古代猪文

    Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...

  7. BZOJ1951 [Sdoi2010]古代猪文 中国剩余定理 快速幂 数论

    原文链接http://www.cnblogs.com/zhouzhendong/p/8109156.html 题目传送门 - BZOJ1951 题意概括 求 GM mod 999911659 M=∑i ...

  8. bzoj 1951 [Sdoi2010]古代猪文 ——数学综合

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951 数学综合题. 费马小定理得指数可以%999911658,又发现这个数可以质因数分解.所 ...

  9. bzoj千题计划323:bzoj1951: [Sdoi2010]古代猪文(Lucas+CRT+欧拉定理)

    https://www.lydsy.com/JudgeOnline/problem.php?id=1951 先欧拉降幂 然后模数质因数分解 分别计算组合数的结果,中国剩余定理合并 #include&l ...

随机推荐

  1. Vue2.0 —生命周期和钩子函数

    vue生命周期简介 咱们从上图可以很明显的看出现在vue2.0都包括了哪些生命周期的函数了. 生命周期探究 对于执行顺序和什么时候执行,看上面两个图基本有个了解了.下面我们将结合代码去看看钩子函数的执 ...

  2. datetimebox赋值或取值

    datetimebox赋值或取值 $('#j_dateStart').datebox('setValue', ""); //赋予空值 $("#j_dateStart&qu ...

  3. "ping: unknown host www.baidu.com"问题解决方式

    参考:https://blog.csdn.net/wbainngg123/article/details/51540535 在虚拟机VMware里选择桥接模式,并配置网络之后,发现ping ip地址可 ...

  4. Python字符的转义

    参考原文 廖雪峰Python教程 字符的转义 字符串是以单引号' 或双引号" 括起来的任意文本,比如'abc',"xyz".''或""本身只是一种表示 ...

  5. 诊断:ORA-01919: role ‘PLUSTRACE’ does not exist

    如下错误 SQL> grant plustrace to scott; grant plustrace to scott * ERROR at line 1: ORA-01919: role ' ...

  6. 1002 A+B for Polynomials (PAT (Advanced Level) Practice)

    This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: Each ...

  7. Spring SpEL 各种写法示例

    项目路径 先说一下三个bean都有哪些属性 Address.java private String city;//城市 private String street;//街道 Car.java priv ...

  8. HDU 1114 完全背包问题的转化

    题目大意: 根据存钱罐中钱的重量,和每一种钱对应的重量和价值,判断钱能否塞满这个重量,如果能,输出得到的最小价值 这个问题就是要把它和背包问题连接起来,这里钱取得数目是无穷的,所以这里只需要用到完全背 ...

  9. [luoguP1282] 多米诺骨牌(DP + 背包)

    传送门 将问题转换成分组背包,每一组有上下两个,每一组中必须选则一个,上面的价值为0,下面的价值为1,求价值最小 因为要求上下两部分差值最小,只需从背包大小为总数 / 2 时往前枚举,找最小答案即可. ...

  10. [K/3Cloud]关于数据库sa密码更改,管理中心登录不上的问题。

    有时候可能应为别的原因可能一不小心更改了数据库的密码,导致K/3 Cloud管理中心和单据打不开. 这个时候其实只要在注册一下就能解决了,在浏览器中输入http://192.168.25.35:800 ...