【数论】[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]古代猪文 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 猪王国的文明源远流长,博大精 ...
随机推荐
- 剑指offer——62数组种数字出现的次数
题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题解: 我们想到异或运算的一个性质:任何一个数字异或它自己都等于0.也就是说,如果我们从头到尾依 ...
- Django框架(三)—— orm增删改查、Django生命周期
目录 orm增删改查.Django生命周期 一.orm介绍 二.orm增删改字段 三.Django生命周期 orm增删改查.Django生命周期 一.orm介绍 1.什么是orm ORM即Object ...
- shell提取rpm的报名
说明: rpm本身未安装,下面方法是基于rpm包文件实现提取rpm的包名 rpm -qpi ZXVEi-git0/CgsOS/abrt-2.1.11-48.el7.centos.x86_64.rpm ...
- li中下的a元素的字超出了li的宽度
网站搬迁,给你带来的不便敬请谅解! http://www.suanliutudousi.com/2017/10/21/li%E4%B8%AD%E4%B8%8B%E7%9A%84a%E5%85%83%E ...
- Size Assert
判断返回内容的大小
- js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
1 escape()函数 定义和用法 escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串. 语法 escape(string) 参数 描述 string 必需.要被转义或 ...
- android中的Handler消息传输机制
android平台不允许Activity新启动的线程访问该Activity里的界面组件,这样就导致新启动的线程无法动态的改变界面组件的属性值.但是实际android应用开发中,需要新启动的线程周期性地 ...
- c++ const (转)
在C++的类定义里面,可以看到类似下面的定义: class List { private: Node * p_head; int length; …… Public: int GetLength () ...
- Java Selenium起步
先将录制的脚本导出来,转成java的格式 在Eclipse中编辑并运行test 2.1 新建一个Java project: File-New-Java Project 2.2 在上一步 ...
- 笔记34 Spring MVC的高级技术——处理multipart形式的数据
一.需求介绍: Spittr应用在两个地方需要文件上传.当新用户注册应用的时候,我 们希望他们能够上传一张图片,从而与他们的个人信息相关联.当用 户提交新的Spittle时,除了文本消息以外,他们可能 ...