博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[SDOI2010]古代猪文
阅读量:7078 次
发布时间:2019-06-28

本文共 1126 字,大约阅读时间需要 3 分钟。

题解:

一看就是一道数学题了。

根据欧拉定理,必须要处理的是$sum_i|n C(n,i)\space mod \space \phi(p)$

令A等于这个大式子。

phi(p)=999911658=2*3*4679*35617

是四个质数的乘积。

看来就类似扩展LUCAS了。

但是,指数只有1

所以,我们可以求出:

A = a1 mod 2

A = a2 mod 3

A = a3 mod 4679

A = a4 mod 35617

(a1~a4怎么求?LUCAS定理即可。)

这是一个同余方程,要解出A

其实,我们就要A = a5 mod 999911658

中国剩余定理合并,返回a5即可。

不会CRT?右转:

注意,求的A是在mod 999911658下的。不能用其他质数mod完。除了ti,即Mi在mod mi下的逆元。

 

最后计算G^a5 mod 999911659

但是,出题人比较狡诈,还是有坑的。

因为,欧拉定理的适用的前提是:gcd(G,mod)=1;

扩展欧拉定理更是如此。

如果G=mod,那么就不互质了。

如果这时候,恰好a5=0,那么我们会输出1

其实答案无论如何是0

G=mod判掉即可。

 

代码:

#include
using namespace std;typedef long long ll;const int N=35666;const int mod=999911659;const int P[4]={
2,3,4679,35617};ll jie[4][N],inv[4][N];ll f[4][2];ll n,g;ll qm(ll x,ll y,ll p){ ll ret=1%p; while(y){ if(y&1) (ret*=x)%=p; (x*=x)%=p; y>>=1; } return ret;}ll C(ll a,ll b,ll id){ //if(b==0) return 1; ll ret=jie[id][a]*inv[id][a-b]%P[id]*inv[id][b]%P[id]; //cout<<" C "<
<<" "<<<" "<
<<" "<
<<" : "<
<<" "<
<<" "<
<<" "<
<

 

转载于:https://www.cnblogs.com/Miracevin/p/9738645.html

你可能感兴趣的文章
JAVA中易出错的小问题(二)
查看>>
asp.net 用正则表达式过滤内容中的电话,qq,email
查看>>
1109 Group Photo
查看>>
Flutter插件开发之APK自动安装
查看>>
创建本地CM 离线服务器
查看>>
PHP数组操作——取数组最后一个值
查看>>
springboot集成swagger2
查看>>
node.js学习之流解析(一)
查看>>
YxdIOCP (DIOCP修改版)
查看>>
转:进程 线程 协程 管程 纤程 概念对比理解
查看>>
站内全文搜索
查看>>
scala函数和方法的差别
查看>>
苹果平台上的媒体流播放技术HLS
查看>>
图书馆管理系统程序设计
查看>>
WebService Rest接收大量数据出现基础连接已经关闭的解决方案
查看>>
小R的烦恼 BZOJ3280
查看>>
左神算法基础班4_5折纸问题
查看>>
【整理】SYSCOMMAND的wParam值的宏定义
查看>>
.net Application的目录
查看>>
洛谷 P1313 计算系数 Label:杨辉三角形 多项式计算
查看>>