这里可能包含传送门

又双叒叕数论大杂烩...

定理什么我都不会证

题目很长很啰嗦 但是题意很显然... 化完式子之后就是这么个东东:\(G^{\sum_{k|n}C_k^{\frac{n}{k}}}\ mod\ p\)

看上去好像也并不怎么好求...

而\(p\)是个质数,由于费马小定理,我们知道\(G^{p-1}\equiv 1(mod\ p)\),

所以我们相当于要求\(G^{{\sum_{k|n}C_k^{\frac{n}{k}}} \% (p-1)}\ mod\ p\)

看到大组合数取模自然想到Lucas定理...

可是这里的\(p-1\)并不是质数...

质因数分解:\(999911658=2*3*4679*35617\)(Emmmm这里我偷了个懒在线分解了←_←

对四个质数分别做Lucas就可以写出下面这一堆东西, 然后直接CRT(中国剩余定理(孙子定理))就行了...

\[\left\{\begin{matrix}
ans\equiv c_1(mod\ 2)
\\
ans\equiv c_2(mod\ 3)
\\
ans\equiv c_3(mod\ 4679)
\\
ans\equiv c_4(mod\ 35617)
\end{matrix}\right.
\]

好像就做完了OvO 说起来很简单的样子...

Emmmm,所以这题是不是还能强行给出模数然后考扩展Lucas

地球人看不懂的代码

(我对不起党对不起人民对不起社会地又双叒叕压行了)

谁让数论题一行一个函数压行太舒服了呢→_→

#include <cmath>
#include <cstdio>
typedef long long LL;
const int P=999911658;const int pr[]={2,3,4679,35617};LL fac[4][36666],c[4],N,G,blk; //懒得写质因数分解..(而且可能能避免一些麻烦??)
void exgcd(LL a,LL b,LL &x,LL &y){if(!b)x=1,y=0;else exgcd(b,a%b,y,x),y-=(a/b)*x;}
LL qpow(LL a,LL b,LL p,LL s=1){for(;b;b>>=1,a=a*a%p)if(b&1)s=s*a%p;return s;}
LL inv(LL a,LL b,LL x=0,LL y=0){if(!a)return 0;exgcd(a,b,x,y);return(x%b+b)%b;}
void calcfac(){for(int i=0;i<4;++i){fac[i][0]=1;for(int j=1;j<=pr[i];++j)fac[i][j]=fac[i][j-1]*j%pr[i];}} //预处理阶乘
LL C(LL n,LL m,LL p,LL x=0){if(n<m) return 0; x=pr[p];return fac[p][n]*inv(fac[p][m],x)%x*inv(fac[p][n-m],x)%x;} //计算小于第p个质数的组合数
LL lucas(LL n,LL m,LL p,LL x=0){if(!m) return 1; x=pr[p];return C(n%x,m%x,p)*lucas(n/x,m/x,p)%x;} //基础的Lucas定理
LL CRT(LL x=0,LL y=0,LL ans=0){for(int i=0;i<4;++i)ans=(ans+c[i]*(P/pr[i])%P*inv(P/pr[i],pr[i])%P)%P;return ans;} //中国剩余定理辣~
void ANS(){for(int i=1;i<=blk;++i)if(N%i==0){for(int j=0;j<4;++j){if(i*i!=N) c[j]=(c[j]+lucas(N,i,j))%pr[j];c[j]=(c[j]+lucas(N,N/i,j))%pr[j];}}} //预处理阶乘对各个质数取模的答案(就是式子里的c1..c4)
int main(){scanf("%lld%lld",&N,&G);G%=P;if(!G){puts("0");return 0;}blk=sqrt(N);calcfac();ANS();printf("%lld",qpow(G,CRT(),P+1));}

我怎么会说注意事项

  • 没有\(p_i^{k_i}\)这样的项就不需要扩展Lucas了...
  • 阶乘处理的时候一定记得从0开始处理..
  • 枚举k的时候只需从\(1\sim \sqrt n\)枚举, \(k|n\)就直接把\(C_{n}^{k}\)和\(C_{n}^{\frac{n}{k}}\)一起算了..(\(1\sim n\)枚举我猜会T飞→_→
  • 其实数论题全开long long好像是个不错的主意OvO...
  • 好像是有边界数据要特判来着...(见下)

95才能看的边界数据

#13出锅? 看这里!!!

P.S. 这组数据是我从luogu上交4遍分别输出\(N\ N\%10000\ G\ G\%10000\)抠出来的...

输入 输出
999911657 999911659 0

要是不加特判直接做会输出1 就WA了...

其实我第一遍WA意识到要加特判但是加错了OvO

(你可以看到我代码里的\(P\)是多少然后你应该能猜到出了什么问题→_→

这个部分真啥都没有

其实就是啥都没有...完结撒花~

【学术篇】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. 1951: [Sdoi2010]古代猪文

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. msf反弹shell

    今天回顾了一下msf反弹shell的操作,在这里做一下记录和分享.( ̄︶ ̄)↗ 反弹shell的两种方法 第一种Msfvenom实例: 1.msfconsole #启动msf 2.msfvenom - ...

  2. VC++ 2010 创建高级Ribbon界面详解(4)

    5.辅助控件 除了前面我们介绍的按钮,工具栏,编辑框等基本控件外,为了支持现代软件对丰厚的界面交互方式的要求,Visual Studio 2010还提供了很多其他的辅助控件,例如我们通常会用到的“上一 ...

  3. CM 安装CDH 错误: 安装失败。 无法接收 Agent 发出的检测信号。

    在安装CDH的时候出现错误提示: 安装失败. 无法接收 Agent 发出的检测信号. 日志提示错误: start >> raise socket.error(msg) >>er ...

  4. docker 详细安装及问题排查

    一.安装docker 1.Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname -r 命令查看 ...

  5. 并发新构件之Exchanger:交换器

    Exchanger:JDK描述:可以在对中对元素进行配对和交换的线程的同步点.每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象.Exchang ...

  6. 天道神诀--IPSAN实现多链路以及多路径安装

    # linux6 环境需求 ISCSI服务端: 2张网卡,足够的磁盘空间 iscsi客户端: 2张网卡(与服务端网段相同) ISCSI服务端配置: 与1张网卡配置主要差别在于配置文件中的允许访问网段, ...

  7. hdu6290奢侈的旅行

    高玩小Q不仅喜欢玩寻宝游戏,还喜欢一款升级养成类游戏.在这个游戏的世界地图中一共有n个城镇,编号依次为1到n. 这些城镇之间有m条单向道路,第i 条单项道路包含四个参数ui,vi,ai,bi,表示一条 ...

  8. webpack4 入门配置研究

    1. 全局安装 npm install webpack webpack-cli webpack-dev-server -g 1.1)输密文的密码(电脑开机) 1.2)安装成功 2. 输入命令mkdir ...

  9. pytest--两个fixture时,灵活运用

    import pytest@pytest.fixture()def login_r(open_browser): print('登陆') @pytest.fixture()def open_brows ...

  10. spring的组成模块

    spring的核心组件(骨骼架构)——   共同创建了Bean关系网络 Core:主要定义了资源的访问方式 Context:给spring提供一个运行时的环境 Bean:Bean的定义,创建以及解析 ...