bzoj1951 [Sdoi2010]古代猪文 ——数论综合
题目: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]古代猪文 ——数论综合的更多相关文章
- 【bzoj1951】: [Sdoi2010]古代猪文 数论-中国剩余定理-Lucas定理
[bzoj1951]: [Sdoi2010]古代猪文 因为999911659是个素数 欧拉定理得 然后指数上中国剩余定理 然后分别lucas定理就好了 注意G==P的时候的特判 /* http://w ...
- 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 ...
- [bzoj1951] [Sdoi2010]古代猪文 费马小定理+Lucas定理+CRT
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- BZOJ1951:[SDOI2010]古代猪文(Lucas,CRT)
Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...
- BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】
题目 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很久以前,在山的那 ...
- BZOJ1951[SDOI2010]古代猪文
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...
- BZOJ1951 [Sdoi2010]古代猪文 中国剩余定理 快速幂 数论
原文链接http://www.cnblogs.com/zhouzhendong/p/8109156.html 题目传送门 - BZOJ1951 题意概括 求 GM mod 999911659 M=∑i ...
- bzoj 1951 [Sdoi2010]古代猪文 ——数学综合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1951 数学综合题. 费马小定理得指数可以%999911658,又发现这个数可以质因数分解.所 ...
- bzoj千题计划323:bzoj1951: [Sdoi2010]古代猪文(Lucas+CRT+欧拉定理)
https://www.lydsy.com/JudgeOnline/problem.php?id=1951 先欧拉降幂 然后模数质因数分解 分别计算组合数的结果,中国剩余定理合并 #include&l ...
随机推荐
- ThinkPHP---TP功能类之附件下载
[案例]实现公文中附件下载 (1)修改模板文件showList.html,展示列表文件信息 将数据表中的filename(原始文件名)展示到附件下 <td>{$vol.filename}& ...
- Java运算符法则
JAVA运算符法则 运算符是一种特殊的符号,用于表示数据的运算,赋值和比较等: 算术运算符 正号+,负号-,加+,减-,乘*,除/,余或取模%,自增++,自减--,字符串相加+ 正号负号运算符代表运算 ...
- Tomcat 使用redis实现session共享
准备工作: 1.安装nginx 环境搭建参考:https://blog.csdn.net/fd2025/article/details/79878326 nginx.conf的编辑: 2.同一台机器配 ...
- python的webservice请求
1.pip install client 2.pip install suds-jurko #coding=utf-8from suds.client import Clientimport time ...
- csr_matrix参数解析
压缩稀疏矩阵构造时的参数从官网看不明白,参考如下: >>> indptr = np.array([0, 2, 3, 6]) >>> indices = np.arr ...
- 运行jar包的命令
windows下使用java -jar xxx.jar运行,linux下使用nohup java -jar xxx.jar & 如果想停止jar运行,ps -ef查看进程(进程多的话也可以加上 ...
- Java基础——二分法
BinarySearch 二分法查找,顾名思义就是要将数据每次都分成两份然后再去找到你想要的数据,我们可以这样去想,二分法查找很类似与我们平时玩的猜价格游戏,当你报出一个价格时裁判会告诉你价格相对于真 ...
- SIGFPE能处理上下溢吗?
SIGFPE可以报告算术异常.包括上下溢.除零等. C标准库说: 各种实现报告的异常类型区别也很大,但几乎没有实现会报告整型溢出. 真的吗?我测试了一下,发现在GCC上,整型.浮点上下溢都不会报告,但 ...
- Educational Codeforces Round 41 D. Pair Of Lines(961D)
[题意概述] 给出平面上的10W个点,要求判断这些点能否被两条直线穿过,即一个点至少在一条直线上. [题解] 思路很快可以想到.取3个不共线的点,它们形成一个三角形:如果有解,其中的一条直线一定与三角 ...
- javaHttp请求,接收到的是中文乱码如何处理
可在service()方法中加日志,看哪种不是乱码 例如,中文乱码的话,中文编码一般有 UTF-8,GBK,ISO-8859-1 加日志为 List<String> list = new ...