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取模后的值


  首先以为n>=m,所以m!是n!的因数,所以每次找到一个与m!互质的数,那么我们就可以得到n!/m!个数与m!互质。
  所以答案就是phi(m!)*n!/m!。
  (i为质数)
  那么易得(i为质数)
  然后线性求1-1000W的fac[i](i!%R)和inv[i](i的逆元)即可(素数用exgcd,其他的用到inv是个积性函数(i,j互质,f[i*j]=f[i]*f[j]))。
  phi值可以不用线性筛。。O(sqrt(n))求单个即可,实际效率更高。
  inv只需要求素数的就可以辣。。(求其他的亲测tle,可能超时。。)
  还有一个ans数组记录n!后面那一坨的值,具体求法:是素数,那么就ans[i]=ans[i]*(i-1)*inv[i]。(记得mod),否则不动,不过不管是不是素数,在操作之前都要ans[i]=ans[i-1],三个数组的头号元素值都是1.
  

 #include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm> #define maxn 10000000 typedef long long ll; using namespace std; int prime[maxn+],b=,inv[maxn+],mod,fac[maxn+],x,y,ans[maxn+]; bool is_prime[maxn+]; void exgcd(int n,int m)
{
if(m==){x=,y=;return;}
exgcd(m,n%m);
ll t=x;
x=y,y=t-n/m*y;
} void work()
{
inv[]=,fac[]=;
for(int i=;i<=maxn&&i<mod;i++)fac[i]=(ll)i*fac[i-]%mod;
for(int i=;i<=maxn;i++)
{
if(!is_prime[i])prime[++b]=i,exgcd(i,mod),inv[i]=(x%mod+mod)%mod;
int j=,t=*i;
while(j<=b&&t<=maxn)
{
is_prime[t]=;
if(i%prime[j]==)break;
// inv[t]=inv[i]*inv[prime[j]]%mod;
t=prime[++j]*i;
}
}
ans[]=;
for(int i=;i<=maxn;i++)
{
ans[i]=ans[i-];
if(!is_prime[i])ans[i]=(ll)ans[i]*(i-)%mod*inv[i]%mod;
}
} int main()
{
int T;
scanf("%d%d",&T,&mod);
work();
while(T--)
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",(ll)fac[x]*ans[y]%mod);
}
return ;
}

   long long什么的卡的我不要不要的。。

【数学/扩展欧几里得/线性求逆元】[Sdoi2008]沙拉公主的困惑的更多相关文章

  1. 【BZOJ 2186】 2186: [Sdoi2008]沙拉公主的困惑 (欧拉筛,线性求逆元)

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

  2. [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉

    本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉 题目大意 给定n,m,求在1到n!内与m!互质的 ...

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

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

  4. Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2560  Solved: 857[Submit][St ...

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

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

  6. BZOJ_2186_[Sdoi2008]沙拉公主的困惑_欧拉函数

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

  7. 【bzoj2186】[Sdoi2008]沙拉公主的困惑 欧拉函数

    题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的 ...

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

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

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

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

随机推荐

  1. Slickflow.NET 开源工作流引擎基础介绍(一) -- 引擎基本服务接口API介绍

    1. 工作流术语图示                                              图1 流程图形的BPMN图形元素表示 1) 流程模型定义说明流程(Process):是企 ...

  2. C#性能优化实践

    性能主要指两个方面:内存消耗和执行速度.性能优化简而言之,就是在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短. 本文以.NET平台下的控件产品MultiRow为例,描述C# ...

  3. jQuery 自定义事件的学习笔记

    jquery中提供了两种方法可以绑定自定义事件: bind()和one()而绑定的自定义事件的触发,必须得用jquery中的trigger()方法才能触发. 我们先来看on事件  代码如下 复制代码 ...

  4. Spring使用总结

    一.基础JAR包 spring-beans.jar spring-context.jar spring-core.jar spring-expression.jar 二.XML的配置 1.一级结构 & ...

  5. Libcurl笔记二

    一: multi与easy接口的不同处The multi interface offers several abilities that the easy interface doesn't. The ...

  6. CSMA-CA介绍

    本文主要介绍通讯领域中CSMA相关机制,本文全部资料来自于网络.   网络通讯,必须依靠介质来传递数据,将数据调制到模拟信号上,再把此信号通过介质传递到远方.根据介质的不同,分为有线网络和无线网络.为 ...

  7. 在Apache中开启虚拟主机

    最近在自学LAMP,在Apache中尝试着开启虚拟主机的时候,遇到了挺多麻烦的,这里也顺便总结一下,在Apache中开启虚拟主机的时候,主要有下面几个步骤: 1.新建一个文件夹作为虚拟主机,用来存储网 ...

  8. 0-1背包问题与N皇后问题的纠结

    昨日同学要我帮他看一道算法,如下: 是不是乍一看是“0-1背包”问题呀,我也这么想,于是就这么兴致勃勃的开始用这个想法去思考怎么算.但是算法也忘得差不多,回去赶紧补补,也趁着这次机会好好复习一下算法, ...

  9. 判断浏览器js代码

    (function(){ var UA = {}; var ua = navigator.userAgent.toLowerCase(),s; UA.ie = (s = ua.match(/(msie ...

  10. DTCMS清除&emsp;&amp;

    DTcms.Common\Utils.cs #region 清除HTML标记 public static string DropHTML(string Htmlstring) 中的 Htmlstrin ...