[ SDOI 2010 ] 古代猪文
\(\\\)
Description
一句话题意:
设 \(x=\sum_{d|n} C_n^d\),求 \(G^x\pmod {999911659}\) 。
从原题面大段语文中其实不难推出所求。
\(\\\)
Solution
以前一不敢碰..... 今天做做发现是个水题
显然问题在指数上,而不是整个式子。
暴力检验一下,发现模数为质数。根据费马小定理,\(a^k\equiv a^{k\pmod {p-1}}\pmod{p-1}\) 。
所以所求化为 \(\sum_{d|n}C_{n}^d\pmod{999911658}\) woc怕不是要EXCRT
后来发现这个模数很萎.....标准分解一下 \(999911659=2\times3\times4679\times35617\) 。
叫什么 square-free-number ,其实就是只为考个 \(CRT\) 强行凑了一个数罢了......
对四个质数分别用 \(Lucas\) 搞一下,然后 \(CRT\) 合并就好了。
其实最后还是被坑了一下,注意最外层快速幂的模数跟 CRT 合并的时候的 M 不同。
还要特判 \(a\ |\ p\) 的情况,因为这种情况下费马小定理不成立。
\(\\\)
Code
#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define R register
#define N 50010
#define mo 999911658ll
using namespace std;
typedef long long ll;
ll mod[5]={0,2,3,4679,35617},m[5],fac[N];
inline void init(ll p){
fac[0]=1;
for(R ll i=1;i<=p;++i) fac[i]=fac[i-1]*i%p;
}
inline ll qpow(ll x,ll t,ll p){
ll res=1;
while(t){
if(t&1) (res*=x)%=p;
(x*=x)%=p; t>>=1;
}
return res;
}
ll C(ll n,ll m,ll p){
if(m>n) return 0;
return fac[n]*qpow(fac[m],p-2,p)%p*qpow(fac[n-m],p-2,p)%p;
}
ll lucas(ll n,ll m,ll p){
if(n<m) return 0;
if(!m||!n) return 1;
return C(n%p,m%p,p)*lucas(n/p,m/p,p)%p;
}
inline ll solve(ll n,ll p){
init(p);
ll t=sqrt(n),res=0;
for(R ll i=1;i<=t;++i)
if(n%i==0){
(res+=lucas(n,i,p))%=p;
if(n/i!=i) (res+=lucas(n,n/i,p))%=p;
}
return res;
}
inline ll CRT(ll n){
ll res=0;
for(R ll i=1;i<=4;++i){
m[i]=mo/mod[i];
res=(res+m[i]*solve(n,mod[i])%mo*qpow(m[i],mod[i]-2,mod[i]))%mo;
}
return res;
}
int main(){
ll n,g;
scanf("%lld%lld",&n,&g);
if(g%(mo+1)==0){puts("0");return 0;}
printf("%lld\n",qpow(g,CRT(n),mo+1));
return 0;
}
[ SDOI 2010 ] 古代猪文的更多相关文章
- 【数学/扩展欧几里得/Lucas定理】BZOJ 1951 :[Sdoi 2010]古代猪文
Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...
- BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)
数论神题了吧算是 1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1573 Solved: 650 [Submit ...
- 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 ...
- 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] ...
- 古代猪文:数论大集合:欧拉定理,exgcd,china,逆元,Lucas定理应用
/* 古代猪文:Lucas定理+中国剩余定理 999911658=2*3*4679*35617 Lucas定理:(m,n)=(sp,tp)(r,q) %p 中国剩余定理:x=sum{si*Mi*ti} ...
- [SDOI2010]古代猪文 (欧拉,卢卡斯,中国剩余)
[SDOI2010]古代猪文 \(solution:\) 这道题感觉综合性极强,用到了许多数论中的知识: 质因子,约数,组合数 欧拉定理 卢卡斯定理 中国剩余定理 首先我们读题,发现题目需要我们枚举k ...
- 洛咕 P2480 [SDOI2010]古代猪文
洛咕 P2480 [SDOI2010]古代猪文 题目是要求\(G^{\sum_{d|n}C^d_n}\). 用费马小定理\(G^{\sum_{d|n}C^d_n\text{mod 999911658} ...
- BZOJ 1951 【SDOI2010】 古代猪文
题目链接:古代猪文 好久没写博客了,这次就先写一篇吧…… 题面好鬼……概括起来就是:给出\(N,G(\leqslant 10^9)\),求:\[G^{\sum_{d|n}\binom{n}{d}} \ ...
随机推荐
- 发挥bat的作用
from 转自:http://blog.csdn.net/hitlion2008/article/details/7467252 1.什么是Windows BATCH BATCH也就是批处理文件,有时 ...
- 嵌入式开发之davinci--- 8148/8168/8127 中的图像缩放sclr、swms之后出现图像视频卡顿、屏幕跳跃的问题
()问题原因 这边的case链路是这样的camera->sclr(yuv420sp cif)->dup->ipcframeoutm3<->ipcframerocess&l ...
- javaScript定义函数的三种方式&变量的作用域
一.函数定义 方式1.普通方式定义函数 function 函数名(參数n){ 函数体 } function add(a,b){ return a+b; } 方式2.直接量定义函数 var 函数名=fu ...
- my.cnf配置详解[转载]
先粘贴一份mac下的mysql5.6.22的配置文件 # Example MySQL config file for medium systems. # # This is for a system ...
- 在Eclipse中tomcat 内存配置
修改1: 在Eclipse中下面Servers双击Tomcat Server... 然后点击General InformAtion 下的Open launch configuration: 会弹出Ed ...
- ABAP ODATA接口开发
1.SE37 创建好 Remote-Enabled函数. 2.SEGW,新建项目 创建项目之后,展开,右键Data Model,Import 函数. 导入函数之后,创建mapping 3./IWFND ...
- 设置Table边框的CSS
<!DOCTYPE html> <html> <head> <style> table, td, th { border: 1px solid blac ...
- HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)
链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...
- AutoIT:为文件夹下面的文件批量改名
以前用Ruby脚本,对于中文,数字结合的文件名,修改名字也不是非常简单,需要修改字符集,可是用autoit来实现,也挺简单的,并且可以替换已有文件名中的汉字部分. $filepath = " ...
- poj 3321(带时间戳 + 区间统计)
题目描述: 给定一颗树,求某个节点的子树的val值之和 可以用树的前序遍历给每一个节点编号,从而可以确定一个节点的子树的范围,这样就可以进行直接在区间上进行统计了. vector < int & ...