【数论】[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]古代猪文 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 猪王国的文明源远流长,博大精 ...
随机推荐
- TortoiseGit密钥设置
需要用到TortoiseGit的puttykey generator工具来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥. 1. 安装完成TortoiseGit后 ...
- 调用phone库,查询手机号码归属地(4)
需要安装pymysql,phone库 #!/usr/bin/python # -*- coding: utf-8 -*- import sys, pymysql, logging, phone fro ...
- 7_springboot2.x开发热部署
概述:在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间花费,我们希望不重启应用的情况下,程序可以自动部署(热部署).有以下四种情况,如何能实现热部署. 1.模板引擎 在Spr ...
- C# Windows服务相关
代码及注释 ServiceController sc = new ServiceController("gupdatem"); sc.Stop();//停止服务 sc.Start( ...
- 从模块到python文件的两种用法
01模块的四种形式 模块 就是从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名是test.py的话,它的对应模块名就是test) 包 用 ...
- git 常用命令 mv rm checkout revert reset
关于上节讲的git add 时需要添加注释信息,也可以在git commit时再添加 laoni@DESKTOP-TPPLHIB MINGW64 /c/laoni/PycharmProjects/gi ...
- GP下CalculateField的用法
以前用过这个类做字段计算,许久不用有些忘却,记录一下使用方式 public static void CalculateField(IFeatureLayer featureLayer,IField f ...
- 读书笔记---《Docker 技术入门与实践》---为镜像添加SSH服务
之前说到可以通过attach和exec两个命令登陆容器,但是如果遇到需要远程通过ssh登陆容器的场景,就需要手动添加ssh服务. 下面介绍两种方法创建带有ssh服务的镜像,commit命令创建和通过D ...
- springmvc3.2集成redis集群
老项目需要集成redis集群 因为spring版本才从2.x升级上来,再升级可能改动较大,且并非maven项目升级麻烦,故直接集成. jar包准备: jedis-2.9.0.jar -- 据说只有这 ...
- linux6查看时间同步服务器的匹配源
当服务器时间与设定好的同步时间源的时间有差异的时候,一般都需要先查看本机的时间同步服务功能是否在正常的运转,以及同步的时间源是哪里,在这里为大家提供一个检查时间用的命令. linux/centos 6 ...