【题目链接】

http://www.lydsy.com/JudgeOnline/problem.php?id=2186

【题意】

若干个询问,求1..n!中与m!互质的个数。

【思路】

首先有gcd(a,b)=gcd(a+b,b),则一个与m!互素的数+m!依旧与m!互素,每m!个看作一组,则1..m!中有phi(m!)*(n!/m!)的数与m!互素。即求:

n!(1-1/p1)(1-1/p2)(1-1/p3)… mod R

=n!(1-p1)(1-p2)(1-p3)…/(p1*p2*p3…) mod R

其中p1…为m!的质因子即m以内所有的素数。

除法直接乘上一个逆元,用拓展欧几里得算法求一下。

【代码】

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. using namespace std;
  5.  
  6. typedef long long ll;
  7. const int N = 1e7+;
  8.  
  9. int fac[N],su[N],ans[N],tot;
  10. int n,m,R,T,vis[N];
  11.  
  12. int gcd(int a,int b,int& d,int& x,int& y)
  13. {
  14. if(!b) { d=a; x=; y=; }
  15. else { gcd(b,a%b,d,y,x); y-=x*(a/b); }
  16. }
  17. int inv(int a,int n)
  18. {
  19. int d,x,y;
  20. gcd(a,n,d,x,y);
  21. return d==? (x+n)%n:-;
  22. }
  23.  
  24. void get_pre()
  25. {
  26. fac[]=;
  27. for(int i=;i<N;i++) fac[i]=(ll)fac[i-]*i%R;
  28. for(int i=;i<N;i++) { //快速线性筛法求素数
  29. if(!vis[i]) su[++tot]=i;
  30. for(int j=;su[j]*i<N&&j<=tot;j++) {
  31. vis[i*su[j]]=;
  32. if(i%su[j]==) break;
  33. }
  34. }
  35. ans[]=;
  36. for(int i=;i<N;i++) {
  37. ans[i]=ans[i-];
  38. if(!vis[i]) ans[i]=(ll)ans[i]*(i-)%R*inv(i,R)%R;
  39. }
  40. }
  41.  
  42. int main()
  43. {
  44. scanf("%d%d",&T,&R);
  45. get_pre();
  46. while(T--) {
  47. scanf("%d%d",&n,&m);
  48. printf("%lld\n",(ll)fac[n]*ans[m]%R);
  49. }
  50. return ;
  51. }

bzoj 2186 [Sdoi2008]沙拉公主的困惑(欧拉函数,逆元)的更多相关文章

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

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

  2. [BZOJ 2186][Sdoi2008]沙拉公主的困惑(欧拉函数)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2186 分析: 就是要求1~n!中与m!互质的数的个数 首先m!以内的就是φ(m!) 关 ...

  3. bzoj 2186 [Sdoi2008]沙拉公主的困惑 欧拉函数

    n>=m,所以就变成了求 ϕ(m!)∗n!/m! 而 ϕ(m!)=m!∗(p−1)/p...... p为m!的素因子,即为m内的所有素数,问题就转化为了求 n!∗(p−1)/p...... 只需 ...

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

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

  5. 数学(逆元):BZOJ 2186: [Sdoi2008]沙拉公主的困惑

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

  6. [BZOJ 2186] [Sdoi2008] 沙拉公主的困惑 【欧拉函数】

    题目链接:BZOJ - 2186 题目分析 题目要求出 [1, n!] 中有多少数与 m! 互质.(m <= n) 那么在 [1, m!] 中有 phi(m!) 个数与 m! 互质,如果一个数 ...

  7. BZOJ 2186 [Sdoi2008]沙拉公主的困惑 【逆元】

    题意:求中互质的数的个数,其中. 分析:因为,所以,我们很容易知道如下结论    对于两个正整数和,如果是的倍数,那么中与互素的数的个数为      本结论是很好证明的,因为中与互素的个数为,又知道, ...

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

    #include<cstdio> #include<iostream> #define ll long long #define N 10000009 using namesp ...

  9. BZOJ 2186 SDOI2008 沙拉公主的困惑 数论

    题目大意:给定询问组数T和取模数P,每次询问给定两个整数n和m,求1~(n!)的数中与m!互质的数个个数模P (m<=n) 首先T<=1W,暴力肯定过不去,我们须要预处理一些东西 首先我们 ...

随机推荐

  1. 显示Servlet API主要版本,次要版本以及服务器系统信息

    package com.mhb; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servle ...

  2. 使用Maven创建一个Spring MVC Web 项目

    使用Maven创建java web 项目(Spring MVC)用到如下工具: 1.Maven 3.2 2.IntelliJ IDEA 13 3.JDK 1.7 4.Spring 4.1.1 rele ...

  3. iptables配置——NAT地址转换

    iptables nat 原理同filter表一样,nat表也有三条缺省的"链"(chains): PREROUTING:目的DNAT规则 把从外来的访问重定向到其他的机子上,比如 ...

  4. QTP公开课视频-持续更新中。。。

    以下是视频的下载地址: http://pan.baidu.com/share/link?shareid=1760499709&uk=3711405498

  5. 自定义View(1)简单流程及示例模板

    1,继承View , ViewGroup,或TextView等等 2,绘制相关的api, canvas 画布, paint 画笔 2,重写重要的函数(注意这个顺序) onMeasure 属于View的 ...

  6. oracle SQL Develop导出数据库中的表格数据到excel

    首先打开oracle数据库 1.查询数据库, SELECT * FROM pub_attribute WHERE ELEMENT_CODE='bb382e10d7ce437b8a8c980ba20ac ...

  7. Android开发之ActivityManager获取系统信息

    1.判断指定的service是否在运行 public static boolean isServiceRunning(Context ctx, String serviceName) { Activi ...

  8. iOS学习笔记:frame,bound,center, anchorPoint

    frame: View在它的Super View坐标系里的坐标 bound: 用来定义View自身坐标系和边界的Rect,Rect的原点表示View自身坐标系的原点坐标.举个例子: 一般情况下boun ...

  9. Java Swing中Substance常用皮肤

    AutumnSkin; BusinessSkin; BusinessBlackSteelSkin; BusinessBlueSteelSkin; ChallengerDeepSkin; CremeSk ...

  10. 转:java提取图片中的像素

    本文转自:http://www.infosys.tuwien.ac.at/teaching/courses/WebEngineering/References/java/docs/api/java/a ...