【数论】[SDOI2010]古代猪文
大概就是求这个:
$$G^\sum_{k|N} C_{n}^{k}$$
显然只要把后面的$\sum_{k|N}C_{n}^{k}$求出来就好了
几个要用的定理:
欧拉定理的推论:(a和n互质)
$$a^b \equiv a^{b \mod \varphi(n)} \mod n$$
中国剩余定理:
$$x_0=\sum \frac{M}{m_i}*t_i*a_i$$
卢卡斯定理:
$$C_{n}^{m} \equiv C_{n \mod mod}^{m \mod mod}*C_{\frac{n}{mod}}^{\frac{m}{mod}} (mod mod)$$
先用欧拉定理推论有:
$\sum_{k|N} C_{n}^{k}$可以等价为$ \sum_{k|N} C_{n}^{k} \mod \varphi(mod)$
因为999911659是质数,所以显然有$\varphi(mod)=mod-1$
所以现在我们只要求$ \sum_{k|N} C_{n}^{k} \mod (mod-1)$即可
但是$mod-1$不是质数,卢卡斯定理不适用...
莫非...我们要打一个扩展......
其实并不用!
我们把$mod-1$分解因数有$$999911659=2*3*4679*35617$$
所以就可以做了,把每一个因数都做模数跑一遍,最后用CRT把解合并起来,跑快速幂即可
做这题真的可以复习好多数论知识qwq~
#include<bits/stdc++.h>
#define int long long
#define writeln(x) write(x),puts("")
#define writep(x) write(x),putchar(' ')
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-') f=-;chr=getchar();}
while(isdigit(chr)){ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}void write(int x){
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}const int P = ,M = 1e6+;
int fac[M],n,m,b[]={,,,,},a[M];
int ksm(int x,int p,int mod){
if(p==)return 1ll;
if(p==)return x%mod;
int t=ksm(x,p>>,mod);
if(p&)return t*t%mod*x%mod;
return t*t%mod;
}
inline void Pre(int mod){fac[]=;for(int i=;i<=mod;i++) fac[i]=fac[i-]*i%mod;}
inline int inv(int x,int mod){return ksm(x,mod-,mod);}
int C(int x,int y,int mod){//Lucas
if(x<y) return ;
if(x<mod&&y<mod) return fac[x]*inv(fac[y],mod)%mod*inv(fac[x-y],mod)%mod;
return C(x/mod,y/mod,mod)*C(x%mod,y%mod,mod)%mod;
}void exgcd(int a,int b,int &x,int &y){
if(b==) return x=,y=,void();
exgcd(b,a%b,x,y);
int t=x;x=y;y=t-a/b*y;
}inline int CRT(){
int M=P-,ans=;
for(int i=;i<=;i++){
int m=M/b[i],t,p;
exgcd(m,b[i],t,p);
t=((t%b[i])+b[i])%b[i];
ans=(ans+t*a[i]*m)%M;
}return ans;
}inline void Solve(){
for(int k=;k<=;k++){
int mod=b[k];Pre(mod);
for(int i=;i*i<=n;i++)
if(n%i==){
a[k]=(a[k]+C(n,i,mod))%mod;
if(i*i!=n)a[k]=(a[k]+C(n,n/i,mod))%mod;
}
}cout<<ksm(m,CRT(),P);
}signed main(){
n=read(),m=read();
if(m%P==) return puts(""),;
Solve();
return ;
}
【数论】[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 ...
- 【bzoj1951】: [Sdoi2010]古代猪文 数论-中国剩余定理-Lucas定理
[bzoj1951]: [Sdoi2010]古代猪文 因为999911659是个素数 欧拉定理得 然后指数上中国剩余定理 然后分别lucas定理就好了 注意G==P的时候的特判 /* http://w ...
- [SDOI2010]古代猪文 (欧拉,卢卡斯,中国剩余)
[SDOI2010]古代猪文 \(solution:\) 这道题感觉综合性极强,用到了许多数论中的知识: 质因子,约数,组合数 欧拉定理 卢卡斯定理 中国剩余定理 首先我们读题,发现题目需要我们枚举k ...
- 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] ...
- 洛咕 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]古代猪文 题目背景 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" ...
- 【题解】P2480 [SDOI2010]古代猪文 - 卢卡斯定理 - 中国剩余定理
P2480 [SDOI2010]古代猪文 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 猪王国的文明源远流长,博大精 ...
随机推荐
- Collection Lists
ArrayList LinkedList Vector 顺序添加 抽象数据类型(ADT)是一个实现包括储存数据元素的存储结构以及实现基本操作的算法. ArrayList (1)ArrayList是 ...
- 真实的『REM』手机屏幕适配
rem 作为一个低调的长度单位,由于手机端网页的兴起,在屏幕适配中得到重用.使用 rem 前端开发者可以很方便的在各种屏幕尺寸下,通过等比缩放的方式达到设计图要求的效果. rem 的官方定义『The ...
- git config配置,工作区和版本库联系。
关于git和github的介绍,我这边不多说. 使用在windows下使用git,需要配置环境变量,也可以使用git自带的终端工具.,打开git bash laoni@DESKTOP-TPPLHIB ...
- JQuery on绑定click无效的的bug解决办法?
如果你在移动端使用zepto.js, touch 来代替click事件,那就没有上述标题的问题了.如果你仍然使用了click,在点击事件中苹果机就可能出现无效的结果. 第一种方法: 解决的方法很巧妙, ...
- Unity中调用Windows窗口句柄以及根据需求设置并且解决扩展屏窗体显示错乱/位置错误的Bug
问题背景: 现在在搞PC端应用开发,我们开发中需要调用系统的窗口以及需要最大化最小化,缩放窗口拖拽窗口,以及设置窗口位置,去边框等功能 解决根据: 使用user32.dll解决 具体功能: Unity ...
- Sublime Text3中MarkDown的使用
前言 当我们想要在Sublime文本编辑器中编辑markdown时,需要先安装markdown插件,因为Sublime里默认没有安装该插件,同时在编辑markdown文本时可以实时预览编辑效果. 具体 ...
- python_django_在views模块中操作状态保持(session)
什么叫状态保持? 就比如说我们登陆一个网站,登陆之后的当前页面显示的是登陆状态,但是我们要再跳转同一网站的其他页面,则显示的未登录状态,状态保持就是:我们在当前页面登陆后,再访问其他页面时也显示为登陆 ...
- WPF RichTextBox 当前光标后一个字符是文档的第几个字符
WPF RichTextBox 当前光标后一个字符是文档的第几个字符 运行环境:Win10 x64, NetFrameWork 4.8, 作者:乌龙哈里,日期:2019-05-05 参考: TextP ...
- DOM——创建元素的三种方式
document.write() document.write('新设置的内容<p>标签也可以生成</p>'); innerHTML var box = document. ...
- Java获取properties配置文件信息
调用方法:String url = PropertiesUtil.getProperty("url"); public class PropertiesUtil { public ...