欧拉函数+逆元 [Sdoi2008]沙拉公主的困惑
2017-08-15 21:30
260 查看
**[Sdoi2008]沙拉公主的困惑**
时间限制: 1 Sec 内存限制: 259 MB
题目描述
大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票。房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的数量。现在,请你帮助沙拉公主解决这个问题,由于可能张数非常大,你只需计算出对R取模后的答案即可。R是一个质数。
输入
第一行为两个整数T,R。R<=10^9+10,T<=10000,表示该组中测试数据数目,R为模后面T行,每行一对整数N,M,见题目描述 m<=n
输出
共T行,对于每一对N,M,输出1至N!中与M!素质的数的数量对R取模后的值
样例输入
1 11
4 2
样例输出
1
数据范围:
对于100%的数据,1 < = N , M < = 10000000
这题数据太多了,所以最主体思路就是打表,预处理出所有有用的东西。
首先,N!内于M!互素的数个数为 φ(M!)*N!/M! (我打表试出来的。。不会证),
那再来看 φ(a)=a*(1-1/p1)(1-p2)……(p指小于a的所有素数)那么φ(M!)=M!*那一堆。。
那又可以化简了,原式=N!*那一堆。素数打表打出来,素数逆元线性推出来(如果不会点这里),N!预处理。。(我还会干啥)那么询问就成O(1)的了,
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #define N 10000005 using namespace std; int read() { int sum=0,f=1;char x=getchar(); while(x<'0'||x>'9'){if(x=='-')f=-1;x=getchar();} while(x>='0'&&x<='9'){sum=(sum<<1)+(sum<<3)+x-'0';x=getchar();} return sum*f; } bool no ; int pri[500500],tot; int t,mod,n,m; ll ny ,ans ,jc ; void init() { jc[1]=1; for(int i=2;i<=N;i++)jc[i]=(jc[i-1]*i)%mod; for(int i=2;i<=N;i++) { if(!no[i]) pri[++tot]=i; for(int j=1;j<=tot;j++) { if(pri[j]*i>N)break; no[pri[j]*i]=1; if(i%pri[j]==0)break; } } ny[1]=1; for(int i=2;i<=N&&i<mod;i++)ny[i]=(mod-mod/i)*ny[mod%i]%mod; ans[1]=1; for(int i=2;i<=N;i++) { if(!no[i])ans[i]=(ans[i-1]*(i-1)%mod*ny[i%mod])%mod; else ans[i]=ans[i-1]; } } int main() { scanf("%lld%lld",&t,&mod); init(); while(t--) { scanf("%d%d",&n,&m); printf("%lld\n",((jc %mod)*(ans[m]%mod))%mod); } }
相关文章推荐
- bzoj 2186 [Sdoi2008]沙拉公主的困惑(欧拉函数,逆元)
- BZOJ 2186: [Sdoi2008]沙拉公主的困惑 [欧拉函数][逆元]
- [BZOJ 2186][Sdoi2008]沙拉公主的困惑:欧拉函数
- bzoj2186: [Sdoi2008]沙拉公主的困惑 逆元
- BZOJ2186 [Sdoi2008]沙拉公主的困惑 【数论,欧拉函数,线性筛,乘法逆元】
- 2186: [Sdoi2008]沙拉公主的困惑 线性筛素数+欧拉函数+乘法逆元
- BZOJ2186 [Sdoi2008]沙拉公主的困惑 【数论,欧拉函数,线性筛,乘法逆元】
- bzoj 2186 [Sdoi2008]沙拉公主的困惑 欧拉函数
- Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论
- bzoj 2186: [Sdoi2008] 沙拉公主的困惑 (数论,逆元)
- bzoj 2186 [Sdoi2008]沙拉公主的困惑 欧拉函数
- Bzoj2186:[Sdoi2008]沙拉公主的困惑:欧拉函数+乘法逆元
- 欧拉+逆元-洛谷P2155 [SDOI2008]沙拉公主的困惑
- 【数学/扩展欧几里得/线性求逆元】[Sdoi2008]沙拉公主的困惑
- 【bzoj2186】[Sdoi2008]沙拉公主的困惑 数论 线性筛逆元
- 数学(逆元):BZOJ 2186: [Sdoi2008]沙拉公主的困惑
- BZOJ_2186_[Sdoi2008]沙拉公主的困惑_欧拉函数
- 【数学/扩展欧几里得/线性求逆元】[Sdoi2008]沙拉公主的困惑
- BZOJ 2186 [Sdoi2008]沙拉公主的困惑 - 筛法+线性求逆元
- bzoj 2186 [Sdoi2008]沙拉公主的困惑 欧拉函数