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] 沙拉公主的困惑的更多相关文章

  1. [SDOI 2008]沙拉公主的困惑

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

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

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

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

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

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

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

  5. BZOJ 2186 沙拉公主的困惑

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

  6. [BZOJ 2186][SDOI 2008] 莎拉公主的困惑

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

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

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

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

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

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

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

随机推荐

  1. 单链表的python实现

    首先说下线性表,线性表是一种最基本,最简单的数据结构,通俗点讲就是一维的存储数据的结构. 线性表分为顺序表和链接表: 顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存 ...

  2. 几何学观止(Lie群部分)

    上承这个页面,这次把Lie群的部分写完了 几何学观止-微分几何部分(20181102).pdf 我觉得其他部分(尤其是代数几何部分)我目前没有把握写得令自己满意,总之希望在毕业前能写完吧. 这次调整了 ...

  3. D. Nastya Is Buying Lunch

    链接 [https://codeforces.com/contest/1136/problem/D] 题意 有N个人,a[i]表示第i个人的编号,m个二元组. 当前一个在后一个的前面一个位置时二者可以 ...

  4. 【kindle笔记】之 《犬夜叉》-2017-12-26

    [kindle笔记]读书记录-总 2017-12-26 <犬夜叉> 买kindle的初衷是看计算机工具书看得眼快瞎了,我弟弟推荐给我的Linux系列<鸟叔私房菜> 真的是深思熟 ...

  5. 2019省赛训练组队赛3.26周二---FJUT 2016

    A.Minimum’s Revenge There is a graph of n vertices which are indexed from 1 to n. For any pair of di ...

  6. vue-lazyload简单使用

    vue-lazyload简单使用 npm地址:https://www.npmjs.com/package/vue-lazyload github地址:https://github.com/hilong ...

  7. Nginx Configuring HTTPS servers

    Configuring HTTPS servershttp://nginx.org/en/docs/http/configuring_https_servers.html Configuring HT ...

  8. vue实现双向数据绑定之Object.defineProperty()篇

    前言 vue.js中使用ES5的Object.defineProperty()实现数据的双向绑定 Object.defineProperty()原理 Object.defineProperty()可以 ...

  9. ZJU_1145 OR POJ_1100 Dreisam Equations

    Dreisam Equations { 两个网站的题有点不一样(ZJH有特判)POJ时间卡得紧,建议去POJ过 } 题目大意: 给你一个字符串:是一个等式,等式左边是一个数,右边由若干个数和()构成, ...

  10. Laravel设置软删除及其恢复系列操作

    软删除及其相关实现 在模型类中要使用SoftDeletestrait并设置$date属性数组 <?php namespace App\Models; use Illuminate\Databas ...