2186: [Sdoi2008]沙拉公主的困惑

Time Limit: 10 Sec  Memory Limit: 259 MB

Submit: 2363  Solved: 779

[

id=2186" style="color:blue; text-decoration:none">Submit][

id=2186" style="color:blue; text-decoration:none">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


Sample Output

1



数据范围:

对于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】沙拉公主的困惑的更多相关文章

  1. BZOJ2186: [Sdoi2008]沙拉公主的困惑(求[1,N!]与M!互素的个数)(线性筛)

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 6103  Solved: 2060[Submit][S ...

  2. BZOJ2186 [Sdoi2008]沙拉公主的困惑 【数论,欧拉函数,线性筛,乘法逆元】

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 5003  Solved: 1725 [Submit] ...

  3. [bzoj2186][Sdoi2008]沙拉公主的困惑_数论

    沙拉公主的困惑 bzoj-2186 Sdoi-2008 题目大意:求N!中与M!互质的数的个数. 注释:$1\le N,M\le 10^7$. 想法:显然是求$\phi(M!)$.这东西其实只需要将数 ...

  4. BZOJ2186: [Sdoi2008]沙拉公主的困惑

    传送门 常规数论题,利用欧拉函数的相关性质. 题求$[1,N!]$中与$M!$互质的数的个数,且$M \leq N$.然后根据欧拉函数的相关性质很容易得出这道题的答案为$\frac{\phi (M!) ...

  5. BZOJ2186 SDOI2008沙拉公主的困惑(数论)

    由于n!是m!的倍数,而对于每个与m!互质且小于m!的数x,x+m!.x+2*m!……也与其互质,所以答案即为(n!/m!)*φ(m!). φ(m!)=m!*∏(1-1/pi).其中的pi即为1~m中 ...

  6. [bzoj2186][Sdoi2008]沙拉公主的困惑——数论

    题目大意 求 \[\sum_{i = 1}^{N!} [gcd(i, M!) = 1]\] 题解 显然,题目就是求 \[N!(1-\frac{1}{p_1})(1-\frac{1}{p_2})...\ ...

  7. 【数论】【欧拉函数】【筛法求素数】【乘法逆元】【快速幂取模】bzoj2186 [Sdoi2008]沙拉公主的困惑

    http://www.cnblogs.com/BLADEVIL/p/3490321.html http://www.cnblogs.com/zyfzyf/p/3997986.html 翻了翻题解,这两 ...

  8. 【BZOJ2186】[Sdoi2008]沙拉公主的困惑 线性筛素数

    [BZOJ2186][Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M! ...

  9. 【bzoj2186】: [Sdoi2008]沙拉公主的困惑 数论-欧拉函数

    [bzoj2186]: [Sdoi2008]沙拉公主的困惑 考虑当 gcd(a,b)=1 则 gcd(nb+a,b)=1 所以[1,N!]与M!互质的个数就是 筛出[1,M]所有的素数p[i] 以及逆 ...

  10. 【bzoj2186】[Sdoi2008]沙拉公主的困惑

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3303  Solved: 1129[Submit][S ...

随机推荐

  1. web开发----jsp中通用模版的引用 include的用法

    1.静态引入的示例 通过对两种用法的了解之后  我们现在 使用静态引入 因为上述原因  我的模版页中 只有div  不会有 path等定义  也不会有html标签 如下: 我的header.jsp 全 ...

  2. 【转】rpm包和源码包安装的区别

    转自:https://blog.csdn.net/junjie_6/article/details/59483785 建议在安装线上的生产服务器软件包时都用源码安装,这是因为源码安装可以自行调整编译参 ...

  3. 【雅虎2017】一个在线展示广告的CVR预估框架实践

    论文A Practical Framework of Conversion Rate Prediction for Online Display Advertising 定期更新,获取更多,欢迎sta ...

  4. LN : leetcode 515 Find Largest Value in Each Tree Row

    lc 515 Find Largest Value in Each Tree Row 515 Find Largest Value in Each Tree Row You need to find ...

  5. css的新特性 calc () 使用

    calc()对大家来说,或许很陌生,不太会相信calc()是css中的部分.因为看其外表像个函数,既然是函数为何又出现在CSS中呢?这一点也让我百思不得其解,今天有一同事告诉我,说CSS3中有一个属性 ...

  6. php经典bug

    <?php $tem = 0=="a"?1:2; echo $tem; ?> 输出结果为:1 原因:在0=="a",这个比较中因为会将字符串&quo ...

  7. Verilog之event

    1 Explicit event The value changes on nets and variable can be used as events to trigger the executi ...

  8. R语言学习 - 线图一步法

    首先把测试数据存储到文件中方便调用.数据矩阵存储在line_data.xls和line_data_melt.xls文件中 (直接拷贝到文件中也可以,这里这么操作只是为了随文章提供个测试文件,方便使用. ...

  9. 关于iframe与$.load()哪个更好

    iframe与$.load()哪个更好       iframe可以直接加载页面,但是要付出降低搜索引擎搜索效率的代价,它引入静态文件的方式是完全独立的,简单意思就是,在页面一(父级页面)用ifram ...

  10. 03Struts2基本使用流程

    Struts2基本使用流程 1.新建web工程 2.引入struts2类库 3.创建并配置Struts2的核心控制器web.xml用来拦截客户端请求并将请求转发到相应的Action类中来处理 4.创建 ...