【bzoj2186】[Sdoi2008]沙拉公主的困惑
2186: [Sdoi2008]沙拉公主的困惑
Time Limit: 10 Sec Memory Limit: 259 MB
Submit: 3303 Solved: 1129
[Submit][Status][Discuss]
Description
大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票。房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的数量。现在,请你帮助沙拉公主解决这个问题,由于可能张数非常大,你只需计算出对R取模后的答案即可。R是一个质数。
Input
第一行为两个整数T,R。R<=10^9+10,T<=10000,表示该组中测试数据数目,R为模后面T行,每行一对整数N,M,见题目描述 m<=n
Output
共T行,对于每一对N,M,输出1至N!中与M!素质的数的数量对R取模后的值
Sample Input
4 2
Sample Output
phi (m!) = m! * (p-1)/p p是m!的质因数
整理得 求 n! * (p-1)/p p是m!的质因数,即
预处理1-10000000的素数以及1-10000000的逆元。。。
都可以线性筛。。事实上只要把素数的逆元用exgcd求一求就好,其余并未用到
阶乘取模也预处理一下
| RunID | User | Problem | Result | Memory | Time | Language | Code_Length | Submit_Time |
| 1690284 | songyiqun | 2186 | Accepted | 130196 kb | 6424 ms | C++/Edit | 1369 B | 2016-11-04 11:02:50 |
| 1690280 | songyiqun | 2186 | Time_Limit_Exceed | 130196 kb | 11788 ms | C++/Edit | 1362 B | 2016-11-04 10:57:08 |
| 1690274 | songyiqun | 2186 | Time_Limit_Exceed | 130196 kb | 11780 ms | C++/Edit | 1364 B | 2016-11-04 10:54:02 |
| 1690271 | songyiqun | 2186 | Time_Limit_Exceed | 130200 kb | 11776 ms | C++/Edit | 1380 B | 2016-11-04 10:52:34 |
| 1690264 | songyiqun | 2186 | Time_Limit_Exceed | 249340 kb | 11096 ms | C++/Edit | 1439 B | 2016-11-04 10:48:43 |
| 1690253 | songyiqun | 2186 | Time_Limit_Exceed | 249340 kb | 11576 ms | C++/Edit | 1386 B | 2016-11-04 10:37:04 |
| 1690246 | songyiqun | 2186 | Time_Limit_Exceed | 249340 kb | 11576 ms | C++/Edit | 1386 B | 2016-11-04 10:35:04 |
| 1690241 | songyiqun | 2186 | Time_Limit_Exceed | 249340 kb | 11624 ms | C++/Edit | 1361 B | 2016-11-04 10:26:29 |
| 1690240 | songyiqun | 2186 | Memory_Limit_Exceed | 391772 kb | 0 ms | C++/Edit | 1350 B | 2016-11-04 10:25:49 |
| 1690237 | songyiqun | 2186 | Memory_Limit_Exceed | 391772 kb | 0 ms | C++/Edit | 1350 B | 2016-11-04 10:23:07 |
/*************
bzoj 2186
by chty
2016.11.4
*************/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAXN 10000000
int n,m,T,mod,cnt,prime[],ans[MAXN+],fac[MAXN+],ni[MAXN+];
bool check[MAXN+];
inline int read()
{
int x=; char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x;
}
void exgcd(int a,int b,int &x,int &y)
{
if(!b) {x=; y=; return;}
exgcd(b,a%b,x,y);
int t=x;x=y;y=t-a/b*y;
}
int find(int p)
{
int x,y;
exgcd(p,mod,x,y);
x=(x%mod+mod)%mod;
return x;
}
void pre()
{
fac[]=; ni[]=;
for(int i=;i<=MAXN;i++) fac[i]=(long long)fac[i-]*i%mod;
for(int i=;i<=MAXN;i++)
{
if(!check[i]) prime[++cnt]=i,ni[i]=find(i);
for(int j=;j<=cnt&&prime[j]*i<=MAXN;j++)
{
check[prime[j]*i]=;
if(i%prime[j]==) break;
}
}
ans[]=;
for(int i=;i<=MAXN;i++)
{
ans[i]=ans[i-];
if(!check[i]) ans[i]=(long long)ans[i]*(i-)%mod*ni[i]%mod;
}
}
int main()
{
T=read(); mod=read();
pre();
while(T--)
{
n=read(); m=read();
printf("%d\n",(long long)fac[n]*ans[m]%mod);
}
return ;
}
【bzoj2186】[Sdoi2008]沙拉公主的困惑的更多相关文章
- BZOJ2186: [Sdoi2008]沙拉公主的困惑(求[1,N!]与M!互素的个数)(线性筛)
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 6103 Solved: 2060[Submit][S ...
- BZOJ2186 [Sdoi2008]沙拉公主的困惑 【数论,欧拉函数,线性筛,乘法逆元】
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 5003 Solved: 1725 [Submit] ...
- [bzoj2186][Sdoi2008]沙拉公主的困惑_数论
沙拉公主的困惑 bzoj-2186 Sdoi-2008 题目大意:求N!中与M!互质的数的个数. 注释:$1\le N,M\le 10^7$. 想法:显然是求$\phi(M!)$.这东西其实只需要将数 ...
- BZOJ2186: [Sdoi2008]沙拉公主的困惑
传送门 常规数论题,利用欧拉函数的相关性质. 题求$[1,N!]$中与$M!$互质的数的个数,且$M \leq N$.然后根据欧拉函数的相关性质很容易得出这道题的答案为$\frac{\phi (M!) ...
- BZOJ2186 SDOI2008沙拉公主的困惑(数论)
由于n!是m!的倍数,而对于每个与m!互质且小于m!的数x,x+m!.x+2*m!……也与其互质,所以答案即为(n!/m!)*φ(m!). φ(m!)=m!*∏(1-1/pi).其中的pi即为1~m中 ...
- [bzoj2186][Sdoi2008]沙拉公主的困惑——数论
题目大意 求 \[\sum_{i = 1}^{N!} [gcd(i, M!) = 1]\] 题解 显然,题目就是求 \[N!(1-\frac{1}{p_1})(1-\frac{1}{p_2})...\ ...
- 【数论】【欧拉函数】【筛法求素数】【乘法逆元】【快速幂取模】bzoj2186 [Sdoi2008]沙拉公主的困惑
http://www.cnblogs.com/BLADEVIL/p/3490321.html http://www.cnblogs.com/zyfzyf/p/3997986.html 翻了翻题解,这两 ...
- 【BZOJ2186】[Sdoi2008]沙拉公主的困惑 线性筛素数
[BZOJ2186][Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M! ...
- 【bzoj2186】: [Sdoi2008]沙拉公主的困惑 数论-欧拉函数
[bzoj2186]: [Sdoi2008]沙拉公主的困惑 考虑当 gcd(a,b)=1 则 gcd(nb+a,b)=1 所以[1,N!]与M!互质的个数就是 筛出[1,M]所有的素数p[i] 以及逆 ...
随机推荐
- Build ios app with Delphi Xe4. Lazy Social Talker ready for sale.
Yes, it is build with Delphi XE4. try it. now. What is Lazy Social Talker? Lazy Social Talker is a ...
- 前端基础之jQuery入门 01
jQuery介绍 jQuery是一个轻量级的.兼容多浏览器的JavaScript库. jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行Ajax交互, ...
- 函数及参数http://www.cnblogs.com/Eva-J/p/7125925.html
文件的修改操作.删除操作,with语句 函数: 函数的定义:def 函数名(形参1,形参2....): 函数的调用:函数名(实参1,实参2) 函数的返回值: 定义阶段:return 三种情况:没有返回 ...
- LINUX命令—让人喜爱的find
FIND命令的让人喜爱的地方在于其后面跟着的 –exec 可以执行其他linux命令 这点太让人高兴了,不过他的结尾要带一个特殊的结构 {} \: 说说实例:
- 类里边的构造函数可以被private修饰,在类的内部创建对象。利用这种特性创建单类模式
- POJ1160 Post Office (四边形不等式优化DP)
There is a straight highway with villages alongside the highway. The highway is represented as an in ...
- 高级C/C++编译技术之读书笔记(二)之库的概念
最近有幸阅读了<高级C/C++编译技术>深受启发,该书深入浅出地讲解了构建过程(编译.链接)中的各种细节,从多个角度展示了程序与库文件或代码的集成方法,提出了面向代码复用和系统集成的软件架 ...
- EMQ (Erlang/Enterprise/Elastic MQTT Broker)
EMQ (Erlang/Enterprise/Elastic MQTT Broker) https://www.cnblogs.com/SteveLee/p/9843215.html MQ介绍 EMQ ...
- Java泛型小记
Automobile类: public class Automobile { private String name; public Automobile(String name){ this.nam ...
- JDBC 1 利用Statement对数据库进行增删改查
准备工作 1新建po类:User private int id; private String name; private String pwd; set,get方法省略 2 新建UserDao类, ...