luoguP2480 [SDOI2010]古代猪文
题意
考虑所求即为:\(G^{\sum\limits_{d|n}C_n^d}\%999911659\)。
发现系数很大,先用欧拉定理化简系数:\(G^{\sum\limits_{d|n}C_n^d\%999911658}\%999911659\)。
实际上我们只用求\(\sum\limits_{d|n}C_n^d\%999911658\),之后快速幂即可。
发现\(999911658\)不是个质数,没办法用Lucas定理求组合数,于是考虑拆开\(999911658\),发现为\(2,3,4679,35617\)。
于是对模意义下这四个数分别求\(\sum\limits_{d|n}C_n^d\),假设第\(i\)个求出的为\(a_i\)
发现我们得到了四个形如\(x\equiv a_i\pmod{p_i}\)的方程,用中国剩余定理合并即可得到答案(这其实就是exLucas的简化版)。
code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod1=999911659;
const ll mod2=999911658;
const int maxs=40010;
ll n,m;
ll a[5],prime[]={0,2,3,4679,35617};
ll fac[maxs][5],inv[maxs][5];
inline ll power(ll x,ll k,ll mod)
{
ll res=1;
while(k)
{
if(k&1)res=res*x%mod;
x=x*x%mod;k>>=1;
}
return res;
}
inline ll C(ll n,ll m,ll op)
{
if(m>n)return 0;
return fac[n][op]*inv[n-m][op]%prime[op]*inv[m][op]%prime[op];
}
inline ll Lucas(ll n,ll m,ll op)
{
if(!m)return 1;
return C(n%prime[op],m%prime[op],op)*Lucas(n/prime[op],m/prime[op],op)%prime[op];
}
void exgcd(ll a,ll b,ll& x,ll& y)
{
if(!b){x=1,y=0;return;}
exgcd(b,a%b,x,y);
ll z=x;x=y,y=z-(a/b)*y;
}
inline ll CRT()
{
ll res=0;
for(int i=1;i<=4;i++)
{
ll x,y,M=mod2/prime[i];
exgcd(M,prime[i],x,y);
x=(x%prime[i]+prime[i])%prime[i];
res=(res+a[i]*x%mod2*M%mod2)%mod2;
}
return res;
}
int main()
{
scanf("%lld%lld",&n,&m);
if(m==mod1){puts("0");return 0;}
for(int i=1;i<=4;i++)
{
fac[0][i]=1;
for(int j=1;j<prime[i];j++)fac[j][i]=fac[j-1][i]*j%prime[i];
inv[prime[i]-1][i]=power(fac[prime[i]-1][i],prime[i]-2,prime[i]);
for(int j=prime[i]-1;j;j--)inv[j-1][i]=inv[j][i]*j%prime[i];
}
for(ll i=1;i*i<=n;i++)
{
if(n%i)continue;
for(int j=1;j<=4;j++)
{
a[j]=(a[j]+Lucas(n,i,j))%prime[j];
if(i*i!=n)a[j]=(a[j]+Lucas(n,n/i,j))%prime[j];
}
}
printf("%lld",power(m,CRT(),mod1));
return 0;
}
luoguP2480 [SDOI2010]古代猪文的更多相关文章
- 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 ...
- 1951: [Sdoi2010]古代猪文
1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2171 Solved: 904[Submit][Status] ...
- BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]
1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2194 Solved: 919[Submit][Status] ...
- [SDOI2010]古代猪文 (欧拉,卢卡斯,中国剩余)
[SDOI2010]古代猪文 \(solution:\) 这道题感觉综合性极强,用到了许多数论中的知识: 质因子,约数,组合数 欧拉定理 卢卡斯定理 中国剩余定理 首先我们读题,发现题目需要我们枚举k ...
- 洛咕 P2480 [SDOI2010]古代猪文
洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...
- 【BZOJ1951】[SDOI2010]古代猪文
[BZOJ1951][SDOI2010]古代猪文 题面 bzoj 洛谷 题解 题目实际上是要求 $ G^{\sum d|n\;C_n^d}\;mod \; 999911659 $ 而这个奇怪的模数实际 ...
- 【BZOJ1951】[Sdoi2010]古代猪文 Lucas定理+CRT
[BZOJ1951][Sdoi2010]古代猪文 Description 求$X=\sum\limits_{d|n}C_n^d$,$Ans=G^X (\mod 999911659)$. Input 有 ...
- 洛谷 P2480 [SDOI2010]古代猪文 解题报告
P2480 [SDOI2010]古代猪文 题目背景 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" ...
- 【bzoj1951】: [Sdoi2010]古代猪文 数论-中国剩余定理-Lucas定理
[bzoj1951]: [Sdoi2010]古代猪文 因为999911659是个素数 欧拉定理得 然后指数上中国剩余定理 然后分别lucas定理就好了 注意G==P的时候的特判 /* http://w ...
随机推荐
- RabbitMQ学习笔记(四、RabbitMQ队列)
目录: 消息路由失败了会怎样 备份交换器 TTL与DLX 如何实现延迟队列 RabbitMQ的RPC实现 持久化 事务 发送方确认机制 消息路由失败了会怎样: 在RabbitMQ中,如果消息路由失败了 ...
- 【转】关闭firefox火狐浏览器下载完成时自动扫描(49.0.2以后版本)
用firefox火狐浏览器下载文件到最后时,会显示"剩余时间未知",将持续10秒钟左右,即使几KB 的文件,也要持续这么长时间,问度娘才知道是自动扫描,检查是否有毒,用的却是Goo ...
- 漫长的 windows caffe编译过程 (OnlyCpu)
在windows下 编译caffe代码. 官方推荐是vs2013 而我手头只有VS2017 .准备开始下载代码开始编译. 1 代码下载 windows版本的代码有两份,一份是官方的编译的windows ...
- 图解JVM垃圾内存回收算法
图解JVM垃圾内存回收算法 这篇文章主要介绍了图解JVM垃圾内存回收算法,由于年轻代堆空间的垃圾回收会很频繁,因此其垃圾回收算法会更加重视回收效率,下面博主和大家来一起学习一下吧 前言 首先,我们要讲 ...
- 如何理解Virtual DOM
什么是虚拟DOM 接下来用vdom(Virtual DOM)来简称为虚拟DOM. 指的是用JS模拟的DOM结构,将DOM变化的对比放在JS层来做.换而言之,虚拟DOM就是JS对象.如下DOM结构: & ...
- pytest框架之allure报告生成
一.关于安装 allure是跟pytest一起集成使用的,所以需要同时安装pytest以及allure-pytest插件: pip install pytest pip install allure- ...
- MongoDB for OPS 03:分片 shard 集群
写在前面的话 上一节的复制集也就是主从能够解决我们高可用和数据安全性问题,但是无法解决我们的性能瓶颈问题.所以针对性能瓶颈,我们需要采用分布式架构,也就是分片集群,sharding cluster! ...
- Delphi - 创建SuperDll 持续更新
Delphi SuperDll 作为一名5年的Delpher,一直认为Delphi是桌面应用的王者,我相信其他的Delpher也这么认为. 但是,慢慢的我发现普通方式的Delphi开发会造成代码的严重 ...
- Web前端基础(6):CSS(三)
1. 定位 定位有三种:相对定位.绝对定位.固定定位 1.1 相对定位 现象和使用: 1.如果对当前元素仅仅设置了相对定位,那么与标准流的盒子什么区别. 2.设置相对定位之后,我们才可以使用四个方向的 ...
- PlayJava Day007
今日所学: /* 2019.08.19开始学习,此为补档. */ 1.String类 实例化:①String name1 = "张三" ; ②String name2 = new ...