bzoj2186【SDOI2008】沙拉公主的困惑
2186: [Sdoi2008]沙拉公主的困惑
Time Limit: 10 Sec Memory Limit: 259 MB id=2186" style="color:blue; text-decoration:none">Submit id=2186" style="color:blue; text-decoration:none">Status
Submit: 2363 Solved: 779
[
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
4 2
Sample Output
数据范围:
对于100%的数据,1 < = N , M < = 10000000
HINT
Source
欧拉函数+线性筛法+
乘法逆元
数论题的做法简直不能再6,感觉自己智商严重不够用…
首先答案为phi(m!)*n!/m!%p。由于全部小于m!且与m!互质的数加上m!的整数倍都与m!互质,而其它数都不与m!互质。(正确性显然)
那么这个式子怎么求呢???
我们能够分成两部分来求,phi(m!)/mi和n!。
n!%p是非常easy预处理的。这里的主要问题是怎样求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 10000005
using 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);
}
}
bzoj2186【SDOI2008】沙拉公主的困惑的更多相关文章
- BZOJ2186: [Sdoi2008]沙拉公主的困惑(求[1,N!]与M!互素的个数)(线性筛)
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 6103 Solved: 2060[Submit][S ...
- BZOJ2186 [Sdoi2008]沙拉公主的困惑 【数论,欧拉函数,线性筛,乘法逆元】
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 5003 Solved: 1725 [Submit] ...
- [bzoj2186][Sdoi2008]沙拉公主的困惑_数论
沙拉公主的困惑 bzoj-2186 Sdoi-2008 题目大意:求N!中与M!互质的数的个数. 注释:$1\le N,M\le 10^7$. 想法:显然是求$\phi(M!)$.这东西其实只需要将数 ...
- BZOJ2186: [Sdoi2008]沙拉公主的困惑
传送门 常规数论题,利用欧拉函数的相关性质. 题求$[1,N!]$中与$M!$互质的数的个数,且$M \leq N$.然后根据欧拉函数的相关性质很容易得出这道题的答案为$\frac{\phi (M!) ...
- BZOJ2186 SDOI2008沙拉公主的困惑(数论)
由于n!是m!的倍数,而对于每个与m!互质且小于m!的数x,x+m!.x+2*m!……也与其互质,所以答案即为(n!/m!)*φ(m!). φ(m!)=m!*∏(1-1/pi).其中的pi即为1~m中 ...
- [bzoj2186][Sdoi2008]沙拉公主的困惑——数论
题目大意 求 \[\sum_{i = 1}^{N!} [gcd(i, M!) = 1]\] 题解 显然,题目就是求 \[N!(1-\frac{1}{p_1})(1-\frac{1}{p_2})...\ ...
- 【数论】【欧拉函数】【筛法求素数】【乘法逆元】【快速幂取模】bzoj2186 [Sdoi2008]沙拉公主的困惑
http://www.cnblogs.com/BLADEVIL/p/3490321.html http://www.cnblogs.com/zyfzyf/p/3997986.html 翻了翻题解,这两 ...
- 【BZOJ2186】[Sdoi2008]沙拉公主的困惑 线性筛素数
[BZOJ2186][Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M! ...
- 【bzoj2186】: [Sdoi2008]沙拉公主的困惑 数论-欧拉函数
[bzoj2186]: [Sdoi2008]沙拉公主的困惑 考虑当 gcd(a,b)=1 则 gcd(nb+a,b)=1 所以[1,N!]与M!互质的个数就是 筛出[1,M]所有的素数p[i] 以及逆 ...
- 【bzoj2186】[Sdoi2008]沙拉公主的困惑
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 3303 Solved: 1129[Submit][S ...
随机推荐
- [ Nowcoder Contest 167 #C ] 部分和
\(\\\) \(Description\) 给出一个长度为\(N\)的数组\(A[i]\),保证\(N\)为 \(2\) 的整次幂. 对于每个 \(i\ (i\in [0,N))\)求所有满足\(( ...
- leetcode464 Can I Win
思路: 博弈. 实现: class Solution { public: bool dfs(int cur, int len, int sum, int des, vector<int>& ...
- es6数值扩展
1. 二进制和八进制表示法 从 ES5 开始,在严格模式之中,八进制就不再允许使用前缀0表示,ES6 进一步明确,要使用前缀0o表示. ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0 ...
- Activity随笔
Activity的生命周期 1.正常情况下的生命周期 onCreate: Activity正在被创建,生命周期中的第一个方法,常在此方法中做一些初始化工作,比如调用setContentView方法, ...
- spark web ui
spark UI 界面:http://www.cnblogs.com/xing901022/p/6445254.html 几个概念的解释:http://blog.csdn.net/jiangwlee/ ...
- UVM基础之---------uvm factory机制register
factory机制的一大特点就是根据类的名字来创建类的实例. factory 机制中根据类名来创建类的实例所用到的技术:一是参数化的类,二是静态变量和静态函数.这两者是factory机制实现的根本所在 ...
- Windows下压缩成tar.gz格式
tar.gz 是linux和unix下面比较常用的格式,几个命令就可以把文件压缩打包成tar.gz格式,然而这种格式在windows并不多见,WinRAR.WinZip等主流压缩工具可以释放解开,却不 ...
- windows2008 rs+sql 2008 下配置站点权限
几点注意 Windows 2008 iis7.5 1 建立应用程序池 2 文件目录的权限加上 IIS AppPool\应用程序池名称 (找不到直接录入) 3 文件目录要给 IUser权限,不然出错. ...
- 【C++】朝花夕拾——树(开篇)
树 ===================我是分割线====================== 1. 定义: 一些结点的集合,集合可以为空.定义树的自然方式是递归的方法. 2. 相关概念: 根(ro ...
- 网络编程基础_4.2TCP-客户端
TCP-客户端 #include <stdio.h> // 1. 包含必要的头文件和库, 必须位于 windows之前 #include <WinSock2.h> #pragm ...