题目大意

\[\sum_{i = 1}^{N!} [gcd(i, M!) = 1]
\]

题解

显然,题目就是求

\[N!(1-\frac{1}{p_1})(1-\frac{1}{p_2})...
\]

\[N!\prod(p_i - 1)(\prod p_i)^{-1}
\]

预处理一下,都是线性复杂度。

注意:

  1. N=1的情况
  2. long long

所以,数论题一定要注意各种特殊情况和longlong

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 10000110;
const int N = 10000010;
int n, m, t, r;
int prime[maxn], check[maxn], d[maxn];
int prd1[maxn], prd2[maxn], fact[maxn];
int tot = 0; inline int read() {
char c = getchar();
int f = 1, x = 0;
while (!isdigit(c)) {
if (c == '-')
f = -1;
c = getchar();
}
while (isdigit(c))
x = x * 10 + c - '0', c = getchar();
return x * f;
} inline void get_prime(int n) {
memset(check, 0, sizeof(check));
for (int i = 2; i <= n; i++) {
if (!check[i])
prime[tot++] = i;
for (int j = 0; j < tot; j++) {
if (i * prime[j] > n)
break;
check[i * prime[j]] = 1;
if (i % prime[j] == 0)
break;
}
}
}
inline void get_prd(int p) {
// get prd (p_i - 1) and prd (p_i);
prd1[0] = 1;
prd2[0] = 2;
for (int i = 1; i <= tot; i++) {
prd1[i] = (((ll)prime[i] - 1) % p * (ll)prd1[i - 1]) % p;
prd2[i] = (ll)(prime[i] % p * (ll)prd2[i - 1]) % p;
}
}
inline void init() { for (int i = 0; i < tot; i++) {
for (int j = prime[i]; j < prime[i + 1]; j++)
d[j] = i;
}
fact[0] = fact[1] = 1;
for (int i = 2; i <= N; i++)
fact[i] = (ll)(fact[i - 1] * (ll)i) % r;
}
int pow(int a, int b, int p) {
int x = 1;
int c = b;
while (c) {
if (c & 1)
x = (ll)((ll)x * a) % p;
a = (ll)((ll)a * a) % p;
c >>= 1;
}
return x;
}
int inv(int a, int p) { return pow(a, p - 2, p); }
int main() {
scanf("%lld %lld", &t, &r);
get_prime(N);
get_prd(r);
init();
while (t--) {
n = read();
m = read();
if (m == 1) {
printf("%lld\n", fact[n]);
continue;
}
int ans = ((ll)((ll)fact[n] * prd1[d[m]]) % r * (ll)inv(prd2[d[m]], r)) % r;
printf("%d\n", ans);
}
}

[bzoj2186][Sdoi2008]沙拉公主的困惑——数论的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 第三十四篇 Python面向对象之 反射(自省)

    什么是反射? 反射的概念是由Smith在1982年提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语 ...

  2. ActiveRecord-连接多张表之单表继承

    ActiveRecord-连接多张表之单表继承 1. 基本概念 Rails提供了两种机制,可以将复杂的面向对象模型映射为关系模型,即所谓的单表继承(single-table inheritance)和 ...

  3. cmd命令笔记

    查看端口信息:netstat -ano eg. netstat -ano|findstr 0.0.0.0:443 根据pid查看进程信息等:wmic process get name,executab ...

  4. android问题笔记集

    开发工具:android studio2.2 调试:手机直连调试,版本(android6) 问题1: Error:Unable to start the daemon process. This pr ...

  5. deeplearning.ai课程学习(4)

    第四周:深层神经网络(Deep Neural Networks) 1.深层神经网络(Deep L-layer neural network) 在打算使用深层神经网络之前,先去尝试逻辑回归,尝试一层然后 ...

  6. Visual Studio各版本工程文件之间的转换 [转载]

    原网址:http://www.cnblogs.com/jmliao/p/5594179.html Visual Studio各版本工程文件之间的转换   由于VS版本比较多,低版本无法直接打开高版本的 ...

  7. 另外一种C#多选下拉框

    链接: https://pan.baidu.com/s/1tnLgC9P_V8y9qHTYSg8xGA 密码: cwxj

  8. Android调用Java WebSevice篇之一

    一.服务端WebService 1.服务端环境配置          MyEclipse 10.0.Tomcat6.0.JDK6.0. 2.下载axis相关jar包. 3.创建webservice. ...

  9. Bjarne Stroustrup语录2

    一.致读者  1. 在编程序时,你是在为你针对某个问题的解决方案中的思想建立起一种具体表示.让程序的结构尽可能地直接反映这些思想:   ★.如果你能把“它”看成一个独立的概念,就把它做成一个类.    ...

  10. java生成和解析二维码

    前言 现在,二维码的应用已经非常广泛,在线生成器也是诸多,随手生成. 所以就和大家分享一个小案例,用zxing来做一个的二维码生成器,当然这个例子是比较简单,若是写的不好请多多包涵. ZXING项目是 ...