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. AndroidStudio3.0 Canary 8注解报错Annotation processors must be explicitly declared now.

    体验最新版AndroidStudio3. Canary 8的时候,发现之前项目的butter knife报错,用到注解的应该都会报错 Error:Execution failed for task ' ...

  2. Spartan6系列之GTP Transceiver的介绍与使用

    1.       什么是GTP transceiver? GTP transceiver是FPGA里一种线速度达500Mb/sà6.6Gb/s的收发器,利用FPGA内部可编程资源可对其进行灵活地配置, ...

  3. 3星|《投机教父尼德霍夫的股票投机术》:2003年的书了。作者97年投机大亏后在CNBC《金钱》栏目上的股市评论文章集。

    查资料作者在97年金融危机中大亏,之后在CNBC<金钱>栏目上跟人合写股市评论文章,本书是那些股评文章的集合.有资料说作者在08年有一次大亏. 从这些文章看,作者是比较冷静地看待股市的,不 ...

  4. Mysql导入导出大量数据的方法、备份恢复办法

    经常使用PHP+Mysql的朋友一般都是通过phpmyadmin来管理数据库的.日常的一些调试开发工作,使用phpmyadmin确实很方便.但是当我们需要导出几百兆甚至几个G的数据库时,phpmyad ...

  5. ls 命令还能这么玩?看一下这 20 个实用范例

    Linux中一个基本命令是ls.没有这个命令,我们会在浏览目录条目时会遇到困难.这个命令必须被每个学习Linux的人知道. ls是什么 ls命令用于列出文件和目录.默认上,他会列出当前目录的内容.带上 ...

  6. LTTng

    Waiting for dig... http://frederic-wou.net/lttng/

  7. The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk1.8.0_60\bin;C:\Windows\Sun\Jav

    启动项目自动结束,查看日志发现 [ost-startStop-1] o.a.catalina.core.AprLifecycleListener   : The APR based Apache To ...

  8. TWaver 3D应用于大型数据中心(续)

    在2014年11月份,我们当时发了一篇有关TWaver HTML5 3D应用于大型数据中心的文章,该blog比较详细的描述一些常用的功能的实现方法,比如:动态添加机柜,告警,温度,湿度等相关的功能的具 ...

  9. Android 各大网络请求库的比较及实战

    自己学习android也有一段时间了,在实际开发中,频繁的接触网络请求,而网络请求的方式很多,最常见的那么几个也就那么几个.本篇文章对常见的网络请求库进行一个总结. HttpUrlConnection ...

  10. <MyBatis>入门五 查询的返回值处理

    select : 返回对象:  <select  id = " "  resultType= "对象的全类名"  /> List: <sele ...