大概就是求这个:

$$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. Java8 时间调节器

    TemporalAdjuster 是做日期数学计算.例如,要获得“本月第二个星期六”或“下周二”. 让我们来看看他们的操作. 选择使用任何编辑器创建以下java程序在 C:/> JAVA Jav ...

  2. Linux apache httpd virtual配置

    必须要关闭 selinux,否则无法访问目录

  3. 百度网盘不限速下载PanDownload网页版+IDM

    1.安装配置IDM 下载链接:链接:https://pan.baidu.com/s/13P4ae-IPgi5Y13CGEZgmlg 提取码:do44 安装后在浏览器(推荐chrome或Firefox) ...

  4. python代码技巧总结(更新至17条)

    怎么提高代码水平?答:看牛逼的代码! 牛逼的代码怎么写的?简单,明确,优雅! 怎么简单,明确,优雅?学技巧! 下面搜罗了一些有才格子褂青年的总结,哈哈 1.检查 Python 中的对象 调用 dir( ...

  5. 框架_mybatis2使用注解

    在dao中使用注解: package cn.dao; import cn.mepu.User; import org.apache.ibatis.annotations.Select; import ...

  6. NetCore2.2使用Nlog自定义日志写入路径配置方式

    在一些特定场景的业务需求下,日志需要写入到不同的路径下提供日志分析.第一种:默认Nlog可以通过日志级别来区分路径,——优点是不需要额外配置,开箱即用——缺点是不够灵活,如果超过级别数量,则不满足需求 ...

  7. 在KVM虚拟化中如何实现vlan

    换了好几个浏览器,都不能复制文字上来,不知道为什么.就发我的笔记截图吧

  8. AWS cloudfront

    添加新跳转的时候添加的参数 AcceptAccess-Control-Allow-OriginAuthorizationCloudFront-Forwarded-ProtoCloudFront-Vie ...

  9. python redis 批量设置过期key

    在使用 Redis.Codis 时,我们经常需要做一些批量操作,通过连接数据库批量对 key 进行操作: 关于未过期: 1.常有大批量的key未设置过期,导致内存一直暴增 2.rd需求 扫描出这些ke ...

  10. wordpress非弹窗表单多文件上传插件

    插件名:Drag and Drop Multiple File Upload - Contact Form 7 (ps:如果是弹窗表单,不要使用这个插件Drag and Drop Multiple F ...