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. Unity3d发布错误:could not allocate memery:system out of memery!

    可能出现的原因: 1.项目太大了2.项目坏了3.资源坏了4.单个资源定点数超了e.   解决办法:删除了一些模型.是模型太大,面数.顶点数太多的原因.   Unity3d里查看模型的顶点数 展开fbx ...

  2. request常用方法小结

    HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息. req ...

  3. Android之单选框

    MainActivity继承Activity使用OnCheckedChangeListener接口: package com.cdp.checkbox; import android.app.Acti ...

  4. IOS 图片全屏预览

    如果你感觉累,那就对了那是因为你在走上坡路..这句话似乎有点道理的样子,时常提醒自己无论走到哪都不要忘记自己当初为什么出发.有时想想感觉有的东西可以记录一下,就把它记录下来吧,这次想写一下关于单张图片 ...

  5. (转)优化tomcat,提高网站运行速度

    网站优化方案: 网站优化有很多方面,这里我们先主要讲讲 tomcat优化.[主要针对tomcat6.0及以上版本] 1.  为jvm增加更多的内存,tomcat安装时,默认为126M,可以设置. To ...

  6. 关于 angular 小心得

    心得1: //控制器里面的代码会晚一些执行 setTimeout(function(){ //获取对象的scope var ele = document.querySelector('[ng-cont ...

  7. 膜拜 2014-2 (献给L之三)

    文/安然 深深的夜静静的想你细细的品味满满的甜蜜爱,心灵的对话让我流泪战栗谢谢你给我这么弥足珍贵的体会不能一生相随又有什么关系你一直都在我的爱就永不停息此生足以——献给心底的爱

  8. union 中可以存储的是不带构造函数的类对象

    union 中可以存储的是不带构造函数的类对象 否则不符合逻辑 为什么不符合逻辑?

  9. excl剔除不合格数据求平均值

    excl剔除不合格数据求平均值 trimmean函数 正态分布: CONFIDENCE.NORM 函数

  10. JS 正则 获取URL参数

    function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...