大概就是求这个:

$$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]古代猪文的更多相关文章

  1. 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 ...

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

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

  3. [SDOI2010]古代猪文 (欧拉,卢卡斯,中国剩余)

    [SDOI2010]古代猪文 \(solution:\) 这道题感觉综合性极强,用到了许多数论中的知识: 质因子,约数,组合数 欧拉定理 卢卡斯定理 中国剩余定理 首先我们读题,发现题目需要我们枚举k ...

  4. 1951: [Sdoi2010]古代猪文

    1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2171  Solved: 904[Submit][Status] ...

  5. BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]

    1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2194  Solved: 919[Submit][Status] ...

  6. 洛咕 P2480 [SDOI2010]古代猪文

    洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...

  7. 【BZOJ1951】[SDOI2010]古代猪文

    [BZOJ1951][SDOI2010]古代猪文 题面 bzoj 洛谷 题解 题目实际上是要求 $ G^{\sum d|n\;C_n^d}\;mod \; 999911659 $ 而这个奇怪的模数实际 ...

  8. 【BZOJ1951】[Sdoi2010]古代猪文 Lucas定理+CRT

    [BZOJ1951][Sdoi2010]古代猪文 Description 求$X=\sum\limits_{d|n}C_n^d$,$Ans=G^X (\mod 999911659)$. Input 有 ...

  9. 洛谷 P2480 [SDOI2010]古代猪文 解题报告

    P2480 [SDOI2010]古代猪文 题目背景 "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" ...

  10. 【题解】P2480 [SDOI2010]古代猪文 - 卢卡斯定理 - 中国剩余定理

    P2480 [SDOI2010]古代猪文 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 猪王国的文明源远流长,博大精 ...

随机推荐

  1. Collection Lists

    ArrayList LinkedList  Vector 顺序添加 抽象数据类型(ADT)是一个实现包括储存数据元素的存储结构以及实现基本操作的算法. ArrayList  (1)ArrayList是 ...

  2. 真实的『REM』手机屏幕适配

    rem 作为一个低调的长度单位,由于手机端网页的兴起,在屏幕适配中得到重用.使用 rem 前端开发者可以很方便的在各种屏幕尺寸下,通过等比缩放的方式达到设计图要求的效果. rem 的官方定义『The ...

  3. git config配置,工作区和版本库联系。

    关于git和github的介绍,我这边不多说. 使用在windows下使用git,需要配置环境变量,也可以使用git自带的终端工具.,打开git bash laoni@DESKTOP-TPPLHIB ...

  4. JQuery on绑定click无效的的bug解决办法?

    如果你在移动端使用zepto.js, touch 来代替click事件,那就没有上述标题的问题了.如果你仍然使用了click,在点击事件中苹果机就可能出现无效的结果. 第一种方法: 解决的方法很巧妙, ...

  5. Unity中调用Windows窗口句柄以及根据需求设置并且解决扩展屏窗体显示错乱/位置错误的Bug

    问题背景: 现在在搞PC端应用开发,我们开发中需要调用系统的窗口以及需要最大化最小化,缩放窗口拖拽窗口,以及设置窗口位置,去边框等功能 解决根据: 使用user32.dll解决 具体功能: Unity ...

  6. Sublime Text3中MarkDown的使用

    前言 当我们想要在Sublime文本编辑器中编辑markdown时,需要先安装markdown插件,因为Sublime里默认没有安装该插件,同时在编辑markdown文本时可以实时预览编辑效果. 具体 ...

  7. python_django_在views模块中操作状态保持(session)

    什么叫状态保持? 就比如说我们登陆一个网站,登陆之后的当前页面显示的是登陆状态,但是我们要再跳转同一网站的其他页面,则显示的未登录状态,状态保持就是:我们在当前页面登陆后,再访问其他页面时也显示为登陆 ...

  8. WPF RichTextBox 当前光标后一个字符是文档的第几个字符

    WPF RichTextBox 当前光标后一个字符是文档的第几个字符 运行环境:Win10 x64, NetFrameWork 4.8, 作者:乌龙哈里,日期:2019-05-05 参考: TextP ...

  9. DOM——创建元素的三种方式

    document.write()  document.write('新设置的内容<p>标签也可以生成</p>'); innerHTML  var box = document. ...

  10. Java获取properties配置文件信息

    调用方法:String url = PropertiesUtil.getProperty("url"); public class PropertiesUtil { public ...