[BZOJ 2186][Sdoi2008]沙拉公主的困惑:欧拉函数
来源:互联网 发布:淘宝美工薪资待遇 编辑:程序博客网 时间:2024/05/01 23:11
点击这里查看原题
首先可以得到结果为phi(m!) * (n!/m!)%r,那么难点在于phi(m!)如何求。
因为phi(m!)=m! * (p-1)/p,p为小于m!的质数,所以可以用一个数组ans[i]表示phi(m!)/m!的结果,ans[i]=ans[i-1],如果i为质数,那么ans[i]=ans[i] * (i-1) * inv[i]%r。
另附上递推逆元的证明(以前只会写不会证) By 黄学长
设r=ai+b,求inv[i]
因为-ai=b(mod r),等式两边同除ib,得到
-a/b=1/i(mod r)
于是得到inv[i]=-a * inv[b]
即inv[i]=r-r/i * inv[r%i]%r
/*User:SmallLanguage:C++Problem No.:2186*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=1e7+5;int r,fac[M],ans[M],inv[M],prime[700005],cnt;bool not_prime[M];void pre(){ fac[1]=ans[1]=inv[1]=1; for(int i=2;i<=1e7;i++){ if(!not_prime[i]){ prime[++cnt]=i; } for(int j=1;j<=cnt&&prime[j]*i<=1e7;j++){ not_prime[i*prime[j]]=1; if(i%prime[j]==0) break; } } for(int i=2;i<=1e7;i++){ if(i<r) inv[i]=(ll)(r-r/i)*inv[r%i]%r; fac[i]=(ll)fac[i-1]*i%r; ans[i]=ans[i-1]; if(!not_prime[i]) ans[i]=(ll)ans[i]*(i-1)%r*inv[i%r]%r; }}int main(){ freopen("data.in","r",stdin);// int t; scanf("%d%d",&t,&r); pre(); while(t--){ int n,m; scanf("%d%d",&n,&m); printf("%d\n",(ll)fac[n]*ans[m]%r); } return 0;}
阅读全文
0 0
- bzoj 2186 [Sdoi2008]沙拉公主的困惑 欧拉函数
- 【BZOJ 2186】[Sdoi2008]沙拉公主的困惑 欧拉函数
- [BZOJ 2186][Sdoi2008]沙拉公主的困惑:欧拉函数
- bzoj 2186 [Sdoi2008]沙拉公主的困惑 欧拉函数
- BZOJ 2186: [Sdoi2008]沙拉公主的困惑 [欧拉函数][逆元]
- 欧拉函数+逆元 [Sdoi2008]沙拉公主的困惑
- [BZOJ2186][SDOI2008]沙拉公主的困惑 欧拉函数
- bzoj 2186: [Sdoi2008]沙拉公主的困惑
- 【bzoj 2186】: [Sdoi2008]沙拉公主的困惑
- BZOJ 2186 [Sdoi2008]沙拉公主的困惑
- BZOJ 2186: [Sdoi2008]沙拉公主的困惑
- bzoj 2186 [Sdoi2008]沙拉公主的困惑
- BZOJ 2186 [Sdoi2008] 沙拉公主的困惑
- BZOJ 2186 [Sdoi2008]沙拉公主的困惑
- BZOJ 2186 [Sdoi2008] 沙拉公主的困惑 逆元/欧拉定理
- 2186: [Sdoi2008]沙拉公主的困惑 线性筛素数+欧拉函数+乘法逆元
- [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉
- BZOJ 2186 SDOI2008 沙拉公主的困惑 数论
- win7系统文件删除了怎么办 win7系统文件丢失修复图文教程
- Plant(矩阵快速幂(推理))
- EasyUI中datagrid多层添加时显示乱行问题
- hdoj 1042 N!(还是对大数的处理)
- vue实现app页面切换效果
- [BZOJ 2186][Sdoi2008]沙拉公主的困惑:欧拉函数
- Vue路由开启keep-alive时的注意点
- 深度工作:在一个纷扰的世界里通过专注获得成功的规则
- 关于vs运行结果的显示
- 如何从一个多重循环中直接跳出
- Windows CMD模式下关闭应用程序
- vue-router总结
- 【RabbitMQ】安装
- Python利用{}.fromkeys来创建空字典的时候要注意附默认值时其他键会同时变化