[BZOJ 2186] [SDOI 2008] 沙拉公主的困惑
Description
大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为 \(1\) 到 \(N\) 的阶乘,但是,政府只发行编号与 \(M!\) 互质的钞票。房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的数量。现在,请你帮助沙拉公主解决这个问题,由于可能张数非常大,你只需计算出对 \(R\) 取模后的答案即可。\(R\) 是一个质数。
Input
第一行为两个整数 \(T,R~(R\le10^9+10,T\le10000)\),\(T\) 表示该组中测试数据数目,\(R\) 为模;
后面 \(T\) 行,每行一对整数\(N,M\),见题目描述。
Output
共 \(T\) 行,对于每一对 \(N,M\),输出 \(1\) 至 \(N!\) 中与 \(M!\) 素质的数的数量对 \(R\) 取模后的值。
Sample Input
1 11
4 2
Sample Output
1
HINT
\(1 \le M\le N \le 10000000\)
Solution
因为 \(m\le n\Rightarrow m!\mid n!\),所以答案为 \(\dfrac{\varphi(m!)\times n!}{m!}\)。
其中 \(\varphi(m!)=m!\left(1-\dfrac{1}{p_1}\right)\left(1-\dfrac{1}{p_2}\right)\left(1-\dfrac{1}{p_3}\right)\cdots\),\(p_1,p_2,p_3\) 是 \(m!\) 的质因数,也就是 \([1,m]\) 中的质数。
最终 \(ans=\dfrac{\varphi(m!)\times n!}{m!}=n!\left(1-\dfrac{1}{p_1}\right)\left(1-\dfrac{1}{p_2}\right)\left(1-\dfrac{1}{p_3}\right)\cdots\)
Code
#include <cstdio>
#include <cmath>
const int N = 10000000;
int np[N + 5], p[N + 5], tot, inv[N + 5], fac[N + 5], ans[N + 5], mod;
int read() {
int x = 0; char c = getchar();
while (c < '0' || c > '9') c = getchar();
while (c >= '0' && c <= '9') x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
return x;
}
void euler() {
for (int i = 2; i <= N; ++i) {
if (!np[i]) p[++tot] = i;
for (int j = 1; j <= tot && i * p[j] <= N; ++j) {
np[i * p[j]] = 1;
if (i % p[j] == 0) break;
}
}
}
int main() {
int T = read(); mod = read(), euler(), fac[1] = inv[1] = ans[1] = 1;
for (int i = 2; i <= N; ++i) fac[i] = 1LL * fac[i - 1] * i % mod;
for (int i = 2; i <= N && i < mod; ++i) inv[i] = 1LL * (mod - mod / i) * inv[mod % i] % mod;
for (int i = 2; i <= N; ++i) {
ans[i] = ans[i - 1];
if (!np[i]) ans[i] = 1LL * ans[i] * (i - 1) % mod * inv[i % mod] % mod;
}
while (T--) {
int n = read(), m = read();
printf("%lld\n", 1LL * fac[n] * ans[m] % mod);
}
return 0;
}
[BZOJ 2186] [SDOI 2008] 沙拉公主的困惑的更多相关文章
- [SDOI 2008]沙拉公主的困惑
Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...
- Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2560 Solved: 857[Submit][St ...
- 数学(逆元):BZOJ 2186: [Sdoi2008]沙拉公主的困惑
2186: [Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞 ...
- 【BZOJ 2186】 2186: [Sdoi2008]沙拉公主的困惑 (欧拉筛,线性求逆元)
2186: [Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞 ...
- BZOJ 2186 沙拉公主的困惑
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 3397 Solved: 1164 [Submit] ...
- [BZOJ 2186][SDOI 2008] 莎拉公主的困惑
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 4519 Solved: 1560[Submit][S ...
- BZOJ-2186 沙拉公主的困惑 线性筛(筛筛筛)+线性推逆元
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2417 Solved: 803 [Submit][St ...
- 【bzoj2186】[Sdoi2008]沙拉公主的困惑
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 3303 Solved: 1129[Submit][S ...
- 【BZOJ2186】沙拉公主的困惑(数论)
[BZOJ2186]沙拉公主的困惑(数论) 题面 BZOJ 题解 考虑答案是啥 先假设\(n=m\) 现在求的就是\(\varphi(m!)\) 但是现在\(n!\)是\(m!\)的若干倍 我们知道 ...
随机推荐
- 实时监控input输入值变化
在web开发中,我们有时会需要动态监听输入框值的变化,当使用onkeydown.onkeypress.onkeyup作为监听事件时,会发现一些复制粘贴等操作用不了,同时,在处理组合快键键的时候也很麻烦 ...
- 面试 9:Java 玩转冒泡排序
面试 9:用 Java 实现冒泡排序 南尘的朋友们,新的一周好,原本打算继续讲链表考点算法的,这里姑且是卡一段.虽然在我们 Android 开发中,很少涉及到排序算法,因为基本官方都帮我们封装好了,但 ...
- 2018年计划小目标(9月)PMP
从6.23结束敏捷的系统贯穿学习考试,6.24开始做传统项目管理,系统学习计划,打包报考,(╥╯^╰╥):ACP+实战+PMP+软考,历时两个月 每天上下班路上3个小时,听录音,(报的远程班,倍速听了 ...
- matplot绘图基本使用
先看一个最简单的例子 import matplotlib.pyplot as plt plt.figure() plt.subplot(211) plt.plot([1,2,3], color=''r ...
- Python_列表推导式_生成器的表达式_各种推导式_40
列表推导式: #列表推导式: egg_list = [] for i in range(10): egg_list.append('鸡蛋%s'%i) print(egg_list) egon egg_ ...
- Node.js api接口和SQL数据库关联
数据库表创建 服务器环境配置.连接 .操作.数据库 API接口 原则:
- Java Core - Class文件结构之魔数、版本号、常量池
下图是一个.java文件被编译器编译后产生的二进制的class文件的内容:由图可知,class文件是用两位16进制数来表示的一个字节. 1个字节就是1Byte,1Byte=8bit. 一.魔数(CAF ...
- gethostbyname用法
//会优先查询解析%windir%\system32\drivers\etc\hosts中静态dns表 //一个域名可对应多个IP hostent->h_addr_list ==> 是in ...
- JMeter学习FTP测试计划(转)
FTP服务主要提供上传和下载功能.有时间需要我们测试服务器上传和下载的性能.在这里我通过JMeter做一个FTP测试计划的例子. 1.创建一个线程组 2.线程组--->添加--->配置元件 ...
- composer 自动加载一 通过file加载
github地址 https://github.com/brady-wang/composer composer init 可以生成一个composer.json文件 { "name&quo ...