bzoj2186: [Sdoi2008]沙拉公主的困惑 逆元
来源:互联网 发布:苹果编程 编辑:程序博客网 时间:2024/04/20 08:42
传送门
题意:求1-n!中与m!互质的数的个数,其中m小于n。
思路:由于m小于n,所以n!一定是m!的倍数,小于m!与m!互质的数的个数为phi(m!),所以1-n!中与m!互质的数的个数为n!/m!*phi(m!)=n!/m!*m!*(1-1/p1)*(1-1/p2)*...(1-1/pk) =n!(1-1/p1)*(1-1/p2)*...(1-1/pk)其中p1-pk是m!的素因子,其实也就是小于m的所有素数,最后结果再对一个素数取余。
这个题时间卡的确实很紧,在求逆元的时候用的是o(p)复杂度来求:
void init(){ inv[0]=inv[1]=1; for(int i=2;i<maxn;i++) { if(i>=mod) break; inv[i]=((mod-mod/i)*inv[mod%i])%mod; }}而且在求(1-1/p1)*(1-1/p2)*...(1-1/pk)时先预处理,否则也是超时
完整代码:
#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>using namespace std;typedef long long ll;const int maxn=1e7+5;bool prime[maxn];int cnt;int mod;ll inv[maxn];ll jc[maxn];ll res[maxn];void isprime(){ prime[0]=false; prime[1]=false; prime[2]=true; for(int i=3;i<maxn;i+=2) { prime[i]=true; prime[i+1]=false; } for(int i=3;i<=sqrt((double)maxn);i+=2) if(prime[i]) for(int j=i+i;j<maxn;j+=i) prime[j]=false;}void init(){ inv[0]=inv[1]=1; for(int i=2;i<maxn;i++) { if(i>=mod) break; inv[i]=((mod-mod/i)*inv[mod%i])%mod; }}void factorial(){ jc[0]=jc[1]=1; for(int i=2;i<maxn;i++) { jc[i]=jc[i-1]*i%mod; }}int main(){ int t; scanf("%d%d",&t,&mod); isprime(); init(); factorial(); res[1]=1; for(int i=2;i<maxn;i++) { if(prime[i]) { res[i]=res[i-1]*(i-1)%mod; res[i]=res[i]*inv[i%mod]%mod; } else res[i]=res[i-1]; } while(t--) { int n,m; scanf("%d%d",&n,&m); ll ans=jc[n]*res[m]%mod; printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- bzoj2186: [Sdoi2008]沙拉公主的困惑 逆元
- 【bzoj2186】【sdoi2008】【沙拉公主的困惑】【数论】
- BZOJ2186: [Sdoi2008]沙拉公主的困惑
- bzoj2186: [Sdoi2008]沙拉公主的困惑
- bzoj2186【SDOI2008】沙拉公主的困惑
- 【SDOI2008】【BZOJ2186】沙拉公主的困惑
- [BZOJ2186][Sdoi2008]沙拉公主的困惑
- [Sdoi2008](bzoj2186)沙拉公主的困惑
- 【SDOI2008】【BZOJ2186】沙拉公主的困惑
- [BZOJ2186][Sdoi2008]沙拉公主的困惑
- bzoj2186: [Sdoi2008]沙拉公主的困惑
- BZOJ2186:[Sdoi2008]沙拉公主的困惑
- bzoj2186 [Sdoi2008]沙拉公主的困惑
- bzoj2186: [Sdoi2008]沙拉公主的困惑
- BZOJ2186 [Sdoi2008]沙拉公主的困惑
- BZOJ2186 [Sdoi2008]沙拉公主的困惑 数论:递推求逆元
- Bzoj2186:[Sdoi2008]沙拉公主的困惑:欧拉函数+乘法逆元
- bzoj2186【Sdoi2008】沙拉公主的困惑 数论:欧拉筛法,线性逆元
- HDU 2016
- mq选型的一些网址
- 文章标题
- 设计模式-抽象工厂模式
- spring boot与fastdfs的整合使用
- bzoj2186: [Sdoi2008]沙拉公主的困惑 逆元
- 使用shiro进行登录权限分配
- Exploit Exercises Protostar Stack Part 0-7
- set define off
- linux与windows通信
- Python3 学习札记(四)
- CSS3选择器:nth-child和:nth-of-type之间的差异
- 1.10.ARM的编程模式和7种工作模式
- hdoj-2035-人见人爱A^B(解题报告)