[BZOJ 2186] [Sdoi2008] 沙拉公主的困惑 【欧拉函数】
题目链接:BZOJ - 2186
题目分析
题目要求出 [1, n!] 中有多少数与 m! 互质。(m <= n)
那么在 [1, m!] 中有 phi(m!) 个数与 m! 互质,如果一个数 x 与 m! 互质,即 gcd(m!, x) = 1,
那么 gcd(m!, m! + x) = 1, gcd(m!, m! * 2 + x) = 1, 即 x + k * m! 都与 m! 互质。
这样就很明确了,[1, n!] 中与 m! 互质的数有 phi(m!) * n! / m! 个。
怎么求 phi(m!) 呢?我们知道,一个数 x 如果包含 p^a ,那么 phi(x) 中就含有 p^(a-1) * (p - 1)。
也就是说, phi(x) = x / pi * (pi - 1) , pi 是枚举 x 包含的质数。那么 m! 包含的质数就是 [1, m] 的质数,线性筛就可以了。
最后化简 Ans = n! / pi * (pi - 1) 。pi 是 [1, m] 的质数。
代码
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm> using namespace std; typedef long long LL; const int MaxN = 10000000 + 5, MN = 10000000; int T, Mod, n, m, Top, Ans;
int Prime[MaxN], Fac[MaxN], Inv[MaxN], Pi[MaxN]; bool isPrime[MaxN]; void Prepare()
{
for (int i = 1; i <= MN; ++i) isPrime[i] = true;
isPrime[1] = false;
for (int i = 2; i <= MN; ++i)
{
if (isPrime[i]) Prime[++Top] = i;
for (int j = 1; j <= Top && i * Prime[j] <= MN; ++j)
{
isPrime[i * Prime[j]] = false;
if (i % Prime[j] == 0) break;
}
}
Inv[1] = 1;
int q, r;
for (int i = 2; i <= MN; ++i)
{
q = Mod / i;
r = Mod % i;
Inv[i] = (int)((LL)(Mod - q) * (LL)Inv[r] % Mod);
}
Fac[0] = Pi[0] = 1;
for (int i = 1; i <= MN; ++i)
{
Fac[i] = (int)((LL)Fac[i - 1] * (LL)i % Mod);
if (isPrime[i]) Pi[i] = (int)((LL)Pi[i - 1] * (LL)Inv[i] % Mod * (LL)(i - 1) % Mod);
else Pi[i] = Pi[i - 1];
}
} int main()
{
scanf("%d%d", &T, &Mod);
Prepare();
for (int Case = 1; Case <= T; ++Case)
{
scanf("%d%d", &n, &m);
Ans = (int)((LL)Fac[n] * (LL)Pi[m] % Mod);
printf("%d\n", Ans);
}
return 0;
}
[BZOJ 2186] [Sdoi2008] 沙拉公主的困惑 【欧拉函数】的更多相关文章
- 【bzoj2186】[Sdoi2008]沙拉公主的困惑 欧拉函数
题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的 ...
- [BZOJ 2186][Sdoi2008]沙拉公主的困惑(欧拉函数)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2186 分析: 就是要求1~n!中与m!互质的数的个数 首先m!以内的就是φ(m!) 关 ...
- bzoj 2186 [Sdoi2008]沙拉公主的困惑 欧拉函数
n>=m,所以就变成了求 ϕ(m!)∗n!/m! 而 ϕ(m!)=m!∗(p−1)/p...... p为m!的素因子,即为m内的所有素数,问题就转化为了求 n!∗(p−1)/p...... 只需 ...
- 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 [Sdoi2008]沙拉公主的困惑(欧拉函数,逆元)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2186 [题意] 若干个询问,求1..n!中与m!互质的个数. [思路] 首先有gcd( ...
- BZOJ 2186 [Sdoi2008]沙拉公主的困惑 【逆元】
题意:求中互质的数的个数,其中. 分析:因为,所以,我们很容易知道如下结论 对于两个正整数和,如果是的倍数,那么中与互素的数的个数为 本结论是很好证明的,因为中与互素的个数为,又知道, ...
- bzoj 2186: [Sdoi2008]沙拉公主的困惑
#include<cstdio> #include<iostream> #define ll long long #define N 10000009 using namesp ...
- BZOJ 2186 SDOI2008 沙拉公主的困惑 数论
题目大意:给定询问组数T和取模数P,每次询问给定两个整数n和m,求1~(n!)的数中与m!互质的数个个数模P (m<=n) 首先T<=1W,暴力肯定过不去,我们须要预处理一些东西 首先我们 ...
随机推荐
- linux下64位汇编的系统调用系列
http://blog.csdn.net/mydo/article/category/3084893
- c语言输入输出
一 #include "stdio.h"int main(){ FILE *fp; int ninzu=0; char name[100]; double hsum=0.0; do ...
- Android开发全套视频教程在线观看网盘下载
千锋金牌讲师老罗老师简介: 国内第一批Android教学讲师,10多年软件开发经验,6年多教学经验,曾担任广东电信北京分公司移动事业部项目经理,主持过微软中国平台考试系统.山西省旅游局智能化平台等大型 ...
- java 数组注意点
int[] array1 = new int[4]; int[] array2 = new int[6]; int[] array3 = new int[8]; array2 = array1; ar ...
- CentOS 6.7平台Hadoop 1.2.1环境搭建
本教程使用Vultr的VPS搭建,主要实现HDFS和MapReduce两个功能. master.hadoop - 45.32.90.100 slave1.hadoop - 45.32.92.47 sl ...
- python matplotlib.plot画图显示中文乱码的问题
在matplotlib.plot生成的统计图表中,中文总是无法正常显示.在网上也找了些资料,说是在程序中指定字体文件,不过那样的话需要对plot进行很多设置,而且都是说的设置坐标轴标题为中文,有时候图 ...
- 19个非常有用的Javascript类库
Blackbird是一款非常酷的JavaScript调试工具,带有一个漂亮的界面显示和过滤调试信息. http://www.gscottolson.com/blackbirdjs/ Treesaver ...
- [Mime] MimeReader--读取Mime的帮助类 (转载)
点击下载 MimeReader.rar 这个类是关于MimeReader的帮助类看下面代码吧 /// <summary> /// 类说明:Assistant /// 编 码 人:苏飞 // ...
- Android Studio 2.2 HTTP proxy setting 提示异常
操作系统 :MacOS 10.11.6 IDE :Android Studio 2.2 Java Version :1.8 异常现象描述: 在给Android Studio 2.2设置代理时,出现警告 ...
- 查看alter错误,grep -A,-B,-C的妙用
alert 日志记录了数据库的很多重要信息,要养成时常检查alert日志的习惯,但如果日志很大vi打开翻来覆去找着麻烦,怎么做的可以查错呢? 看我的测试 [oracle@ahjcyl-db bdump ...