bzoj2186【SDOI2008】沙拉公主的困惑
来源:互联网 发布:淘宝店在哪里交保证金 编辑:程序博客网 时间:2024/04/29 14:58
2186: [Sdoi2008]沙拉公主的困惑
Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2363 Solved: 779
[Submit][Status][Discuss]
Description
大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票。房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的数量。现在,请你帮助沙拉公主解决这个问题,由于可能张数非常大,你只需计算出对R取模后的答案即可。R是一个质数。
Input
第一行为两个整数T,R。R<=10^9+10,T<=10000,表示该组中测试数据数目,R为模后面T行,每行一对整数N,M,见题目描述 m<=n
Output
共T行,对于每一对N,M,输出1至N!中与M!素质的数的数量对R取模后的值
Sample Input
1 11
4 2
4 2
Sample Output
1
数据范围:
对于100%的数据,1 < = N , M < = 10000000
数据范围:
对于100%的数据,1 < = N , M < = 10000000
HINT
Source
数论
欧拉函数+线性筛法+乘法逆元
数论题的做法简直不能再6,感觉自己智商严重不够用…
首先答案为phi(m!)*n!/m!%p。因为所有小于m!且与m!互质的数加上m!的整数倍都与m!互质,而其他数都不与m!互质。(正确性显然)
那么这个式子怎么求呢???
我们可以分成两部分来求,phi(m!)/mi和n!。
n!%p是很容易预处理的,这里的主要问题是如何求phi(m!)/m!。
令f(m)=phi(m!)/m!,根据phi(x)=x*(p1-1)/p1*(p2-1)/p2*…
可得f(m)=(p1-1)/p1*(p2-1)/p2*…其中pi为不大于m的质数
所以对于f(i),如果i是质数f(i)=f(i-1)*(i-1)/m,否则f(i)=f(i-1)。
根据以上关系式可以预处理f(1)-f(10^7)。
每次询问只需要输出f(m)*n!%p即可。
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#define F(i,j,n) for(int i=j;i<=n;i++)#define D(i,j,n) for(int i=j;i>=n;i--)#define ll long long#define maxn 10000005using namespace std;int n,m,p,t;ll fac[maxn],ans[maxn];bool f[maxn];inline int read(){int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}inline void exgcd(int a,int b,int &x,int &y){if (!b){x=1;y=0;return;}exgcd(b,a%b,x,y);int t=x;x=y;y=t-a/b*x;}inline int getinv(int a){int x=0,y=0;exgcd(a,p,x,y);return (x%p+p)%p;}int main(){t=read();p=read();int x=10000000;fac[1]=1;F(i,2,x) fac[i]=fac[i-1]*i%p;ans[1]=1;F(i,2,x){if (!f[i]){ans[i]=ans[i-1]*(i-1)%p*getinv(i)%p;F(j,2,x/i) f[i*j]=true;}else ans[i]=ans[i-1];}while (t--){n=read();m=read();printf("%lld\n",ans[m]*fac[n]%p);}}
1 0
- 【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]沙拉公主的困惑
- 【SDOI2008】【BZOJ2186】【沙拉公主的困惑】【题解】【数论】
- 【bzoj2186】[Sdoi2008]沙拉公主的困惑 数论 线性筛逆元
- [BZOJ2186][Sdoi2008]沙拉公主的困惑(数论)
- bzoj2186: [Sdoi2008]沙拉公主的困惑 逆元
- 【慕课笔记】U4 多态 第6节 综合练习
- 河南第六届ACM省赛(异 形 卵)
- 票据的概念和种类
- 置换专题
- 1032. Sharing (25)
- bzoj2186【SDOI2008】沙拉公主的困惑
- mycat 连续分片 -> 自定义数字范围分片
- 自定义安装python,退格,方向键无法正常使用(转)
- IDL get variable size in bytes
- 【翻译自mos文章】Oracle GoldenGate 怎么在源头的传输进程和目的端的server/collector进程之间分配 端口?
- cocos2d-x 部分UI 介绍
- centos下部署jenkins持续集成环境
- SQL Server中常用数据类型简介
- 19 设计模式、反射