【题目链接】

点击打开链接

【算法】

gcd(a,b)=gcd(a mod b, b),又m!|n!
          则有ans=(n!/m!)·ϕ(m!)
          由ϕ(n)=n(1-1/p1)(1-1/p2)...(1-1/pk)
          ans=n!(1-1/p1)(1-1/p2)...(1-1/pk)
          这里p1...pk为m!的所有质因子,即不大于m的所有素数。
          设f(n)=n!,g(m)=(1-1/p1)(1-1/p2)...(1-1/pk)
          都能在O(n)时间内预处理(利用线性筛和线性求逆元)

则ans=f(n)g(m),O(1)回答询问。

【代码】

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int MAXN = ;
  4. typedef long long ll;
  5.  
  6. ll i,k,tmp,T,R,N,M,tot;
  7. ll prime[],t[MAXN+];
  8. int f[MAXN+],fac[MAXN+],inv[MAXN+];
  9.  
  10. template <typename T> inline void read(T &x) {
  11. ll f = ; x = ;
  12. char c = getchar();
  13. for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }
  14. for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
  15. x *= f;
  16. }
  17. template <typename T> inline void write(T x) {
  18. if (x < ) { putchar('-'); x = -x; }
  19. if (x > ) write(x/);
  20. putchar(x%+'');
  21. }
  22. template <typename T> inline void writeln(T x) {
  23. write(x);
  24. puts("");
  25. }
  26.  
  27. int main() {
  28.  
  29. read(T); read(R);
  30.  
  31. for (i = ; i <= MAXN; i++) {
  32. if (!f[i]) prime[++tot] = f[i] = i;
  33. for (k = ; k <= tot; k++) {
  34. tmp = i * prime[k];
  35. if (tmp > MAXN) break;
  36. f[tmp] = prime[k];
  37. if (f[i] == prime[k]) break;
  38. }
  39. }
  40. fac[] = ; inv[] = ; t[] = ;
  41. for (i = ; i <= MAXN; i++) fac[i] = fac[i-] * i % R;
  42. for (i = ; i <= MAXN && i < R; i++) inv[i] = (R - R / i) * inv[R%i] % R;
  43. for (i = ; i <= MAXN; i++) {
  44. if (f[i] != i) t[i] = t[i-];
  45. else t[i] = t[i-] * (i - ) % R * inv[i%R] % R;
  46. }
  47. while (T--) {
  48. read(N); read(M);
  49. writeln(fac[N]*t[M]%R);
  50. }
  51.  
  52. return ;
  53. }

【Sdoi2008】沙拉公主的困惑的更多相关文章

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

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

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

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

  3. 洛咕 P2155 [SDOI2008]沙拉公主的困惑

    洛咕 P2155 [SDOI2008]沙拉公主的困惑 有个结论,就是如果\(gcd(a,b)=1\),那么\(gcd(a+kb,b)=1\).证明比较显然. 所以这个题目要问的\(n!\)就可以分成\ ...

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

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

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

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

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

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

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

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

  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. 洛谷 P2155 [SDOI2008]沙拉公主的困惑 解题报告

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

随机推荐

  1. T3187 队列练习3 codevs

    http://codevs.cn/problem/3187/ 题目描述 Description 比起第一题,本题加了另外一个操作,访问队头元素(编号3,保证访问队头元素时或出队时队不为空),现在给出这 ...

  2. FIREDAC字段类型映射

    为什么需要字段类型映射? 作为通用型数据引擎的FIREDAC或者UNIDAC,驱动某一种数据库以后,总有一些数据库的一些字段类型,数据引擎不能识别,反应到程序中就是数据引擎不能正确地读取该字段的值 . ...

  3. android Activity生命周期的例子

    package com.example.yanlei.yl2; import android.app.AlertDialog; import android.content.DialogInterfa ...

  4. .net core mvc启动顺序以及主要部件2

    原文:.net core mvc启动顺序以及主要部件2 前一篇提到WebHost.CreateDefaultBuilder(args)方法创建了WebHostBuilder实例,WebHostBuil ...

  5. Web常见安全漏洞原理及防范-学习笔记

    公司在i春秋上面报的一个课程.http://www.ichunqiu.com/course/55885,视频学习. OWASP (Open Web Application Secutiry Proje ...

  6. 【转】构造HTTP请求Header实现“伪造来源IP”

    构造 HTTP请求 Header 实现“伪造来源 IP ” 在阅读本文前,大家要有一个概念,在实现正常的TCP/IP 双方通信情况下,是无法伪造来源 IP 的,也就是说,在 TCP/IP 协议中,可以 ...

  7. Oracle创建JOB定时任务

    --- DECLARE JOB NUMBER;BEGIN      DBMS_JOB.SUBMIT(          JOB=>JOB,          WHAT=>'CTABLE_T ...

  8. POJ 1151 HDU 1542 Atlantis(扫描线)

    题目大意就是:去一个地方探险,然后给你一些地图描写叙述这个地方,每一个描写叙述是一个矩形的右下角和左上角.地图有些地方是重叠的.所以让你求出被描写叙述的地方的总面积. 扫描线的第一道题,想了又想,啸爷 ...

  9. 基于SpringMVC框架使用ECharts3.0实现堆叠条形图的绘制(下篇)

    <script type="text/javascript"> $().ready(function() { var myChart = echarts.init(do ...

  10. 项目Beta冲刺(团队1/7)

    项目Beta冲刺(团队1/7) 团队名称: 云打印 作业要求: 项目Beta冲刺(团队) 作业目标: 完成项目Beta版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 陈宇 ...