Bzoj2186:[Sdoi2008]沙拉公主的困惑:欧拉函数+乘法逆元
来源:互联网 发布:淘宝达人昵称大全 编辑:程序博客网 时间:2024/04/24 20:10
题目链接:2186:[Sdoi2008]沙拉公主的困惑
首先有
因为m<=n,所以n!一定是m!的倍数,在[1,m!]中于m!互质的数个数为phi[m!],在[m!+1,n!]中根据可知有(n!-m!)/m!个
所以答案为
因为,其中pi是m!的质因子,所以答案是,pi是m!的质因子
其中m!的质因子就是m的质因子
还要预处理出pi的逆元,可以递推,公式ine[i]=(mod-mod/i*ine[mod%i]%mod);
离线处理即可,神犇说卡常数然而我并没有卡QwQ
#include<cstdio>#include<algorithm>using namespace std;const int maxn=10000010;int T,mod,p[1000010],ine[maxn];struct ques{int n,m;}q[10010];int jc[maxn],mxn,mxm,ret[maxn],N=0;bool vis[maxn];int main(){scanf("%d%d",&T,&mod); jc[1]=ine[1]=ret[1]=1;for (int i=1;i<=T;++i) scanf("%d%d",&q[i].n,&q[i].m),mxn=max(mxn,q[i].n),mxm=max(mxm,q[i].m);for (int i=2;i<=mxn;++i) jc[i]=1LL*jc[i-1]*i%mod;for (int i=2;i<=mxm;++i){if (!vis[i]) p[++N]=i;for (int j=1;p[j]*i<=mxm&&j<=N;++j){vis[p[j]*i]=1;if (i%p[j]==0) break;}}for (int i=2;i<=mxm&&i<mod;++i) ine[i]=(mod-1LL*mod/i*ine[mod%i]%mod);for (int i=2;i<=mxm;++i){ret[i]=ret[i-1];if (!vis[i]) ret[i]=1LL*ret[i]*(i-1)%mod*ine[i%mod]%mod;}for (int i=1;i<=T;++i)printf("%d\n",1LL*jc[q[i].n]*ret[q[i].m]%mod);}
3 0
- Bzoj2186:[Sdoi2008]沙拉公主的困惑:欧拉函数+乘法逆元
- BZOJ2186 [Sdoi2008]沙拉公主的困惑 【数论,欧拉函数,线性筛,乘法逆元】
- [bzoj2186]沙拉公主的困惑 欧拉函数+逆元
- [BZOJ2186][SDOI2008]沙拉公主的困惑 欧拉函数
- bzoj2186[沙拉公主的困惑] 欧拉函数 线性筛 乘法逆元
- 欧拉函数+逆元 [Sdoi2008]沙拉公主的困惑
- 2186: [Sdoi2008]沙拉公主的困惑 线性筛素数+欧拉函数+乘法逆元
- bzoj2186: [Sdoi2008]沙拉公主的困惑 逆元
- BZOJ 2186: [Sdoi2008]沙拉公主的困惑 [欧拉函数][逆元]
- BZOJ 2186-[Sdoi2008]沙拉公主的困惑(乘法逆元)
- [bzoj2186]: 莎拉公主的困惑(欧拉函数+乘法逆元)
- 【bzoj2186】【sdoi2008】【沙拉公主的困惑】【数论】
- BZOJ2186: [Sdoi2008]沙拉公主的困惑
- bzoj2186: [Sdoi2008]沙拉公主的困惑
- bzoj2186【SDOI2008】沙拉公主的困惑
- 【SDOI2008】【BZOJ2186】沙拉公主的困惑
- [BZOJ2186][Sdoi2008]沙拉公主的困惑
- [Sdoi2008](bzoj2186)沙拉公主的困惑
- HDOJ 2665 Kth number(归并树)
- 控制dialog的弹出位置(备忘)
- 程序开发心理学第三篇
- oracle 开发记忆
- Linux多线程——异步
- Bzoj2186:[Sdoi2008]沙拉公主的困惑:欧拉函数+乘法逆元
- org.dom4j.DocumentException: Connection timed out
- 基础最短路
- ES5新增函数之二: Function.prototype.bind();
- gdb+gdbserver调试arm-linux程序
- C++第二次博客
- SpannableString使用详解
- Android开发中应该养成的好习惯
- EXCEL应用