首先我们看到题目要求的是1~N!内有M!互质的个数

N!>M!,而我们是知道在M!以内与M!互质的数的个数,即phi(M!)

但是M!~N!内与M!互质的数有多少个呢?

对于每个互质的数,如果我们给他都加上M!,那一定也和M!互质

所以1~N!之间与M!互质的数为phi(M!)*(N!/M!)

由于M!很大,不能有以前的方法计算,我们可以考虑用公式计算

phi(m)=m*(p1-1)/p1*(p2-1)/p2……*(pk-1)/pk pk为m的素因数

因为m!所包含的素因数只可能在1~m内,这是比较容易计算出来的

简化可得ans=N!*(p1-1)/p1*(p2-1)/p2……*(pk-1)/pk

由于这道题又牵扯到了除法取模,所以又要用到扩展欧几里得

然后这道题是坑爹的多测,我们要预处理素数表,阶乘表等等,具体见程序

 var a,b,d:array[..] of int64;
    x,y:array[..] of longint;
    v:array[..] of boolean;
    prime:array[..] of longint;
    tot,j,i,t,p,n,m:longint;
    r,k,ans,s:int64; procedure exgcd(a,b:int64);
  var z:int64;
  begin
    if b= then
    begin
      r:=;
      k:=;
    end
    else begin
      exgcd(b,a mod b);
      z:=r;
      r:=k;
      k:=z-(a div b)*k;
    end;
  end; begin
  readln(t,p);
  for i:= to t do
  begin
    readln(x[i],y[i]);
    if x[i]>m then m:=x[i];
  end;
  for i:= to m do   //筛素数
  begin
    if not v[i] then
    begin
      inc(tot);
      prime[tot]:=i;
    end;
    for j:= to tot do
    begin
      if i*prime[j]>m then break;
      v[i*prime[j]]:=true;
      if i mod prime[j]= then break;
    end;
  end;
  d[]:=;
  a[]:=;
  b[]:=;
  for i:= to m do
  begin
    a[i]:=a[i-];
    b[i]:=b[i-];
    if not v[i] then
    begin
      a[i]:=a[i]*int64(i-) mod p;
      b[i]:=b[i]*int64(i) mod p;
    end;
    d[i]:=d[i-]*int64(i) mod p;
  end;
  for j:= to t do
  begin
    ans:=d[x[j]]*a[y[j]] mod p;
    exgcd(b[y[j]],p);
    r:=(r+p) mod p;
    writeln(ans*r mod p);
  end;
end.

bzoj2186的更多相关文章

  1. 【BZOJ2186】沙拉公主的困惑(数论)

    [BZOJ2186]沙拉公主的困惑(数论) 题面 BZOJ 题解 考虑答案是啥 先假设\(n=m\) 现在求的就是\(\varphi(m!)\) 但是现在\(n!\)是\(m!\)的若干倍 我们知道 ...

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

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

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

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

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

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

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

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

  6. [BZOJ2186]沙拉公主的困惑

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

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

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

  8. 【BZOJ2186】【SDoi2008】沙拉公主的困惑 数论

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

  9. BZOJ-2186 沙拉公主的困惑 线性筛(筛筛筛)+线性推逆元

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

  10. BZOJ2186 欧拉函数

    欧拉函数:一般记作φ(n),表示1-n中与n互质的数的数量. 欧拉函数是积性函数,即φ(m*n)=φ(m)*φ(n) //这条定理基友面试时还遇到了= = 欧拉函数的值φ(n)=n*(1-p[1])* ...

随机推荐

  1. 10个你可能不知道的JavaScript小技巧

    1.变量转换 看起来很简单,但据我所看到的,使用构造函数,像Array()或者Number()来进行变量转换是常用的做法.始终使用原始数据类型(有时也称为字面量)来转换变量,这种没有任何额外的影响的做 ...

  2. asp.net 用jquery判断fileupload上传文件的大小和类型和名字

    <script language="javascript" type="text/javascript"> //检查上传文件大小和获取文件名 fun ...

  3. Javascript中数组方法汇总

    Array.prototype中定义了很多操作数组的方法,下面介绍ECMAScript3中的一些方法: 1.Array.join()方法 该方法将数组中的元素都转化为字符串并按照指定符号连接到一起,返 ...

  4. linux命令之端口占用

    1.lsof命令 eg: lsof -i:8080,这里显示8080端口在被java使用,状态是LISTEN, 可以使用killall 进程名(killall java) 结束占用端口的进程(不建议, ...

  5. Java实战之01Struts2-01简介及环境搭建

    一.Struts2简介 1.Struts2概述 Struts2是Apache发行的MVC开源框架.注意:它只是表现层(MVC)框架. 2.Struts2的来历 Struts1:也是apache开发的一 ...

  6. python 自动化之路 day 02

    本节内容: 列表.元组操作 字符串操作 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 1 names = ['Alex',&qu ...

  7. PHP学习心得(五)——类型

    简介 PHP 支持8种基本的数据类型. 四种标量类型: boolean (布尔型) integer (整型) float (浮点型, 也称作 double) string (字符串) 两种复合类型: ...

  8. eclipse 启动 出现Failed to create the Java Virtual Machine" 解决方案

    方法如下: 找到eclipse目录下的eclipse.ini,可以看到如下内容:-startupplugins/org.eclipse.equinox.launcher_1.1.0.v20100507 ...

  9. STM32与S3C2440的区别

    一.定位 STM32: 高功能单片机.工业控制 S3C2440:  处理器.智能设备 二.跑系统 STM32: ucos-II S3C2440:  Linux等大型系统 三.硬件架构 STM32: C ...

  10. POJ 1129 Channel Allocation 四色定理dfs

    题目: http://poj.org/problem?id=1129 开始没读懂题,看discuss的做法,都是循环枚举的,很麻烦.然后我就决定dfs,调试了半天终于0ms A了. #include ...