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

1 11
4 2

Sample Output

1
 
 
 
【题解】
 
显然题目是求phi(m!) * ( n! / m!)

phi (m!) = m! * (p-1)/p p是m!的质因数

整理得 求 n! * (p-1)/p p是m!的质因数,即

预处理1-10000000的素数以及1-10000000的逆元。。。

都可以线性筛。。事实上只要把素数的逆元用exgcd求一求就好,其余并未用到

阶乘取模也预处理一下

——转自hzwer
 
这个题解写的很好,我也没什么可说的了。
 
最后吐槽一下:出题人丧心病狂,先卡空间,后卡时间。
 
所以千万不要用全局long long,后果如下:
 
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]沙拉公主的困惑的更多相关文章

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

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

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

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

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

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

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

    传送门 常规数论题,利用欧拉函数的相关性质. 题求$[1,N!]$中与$M!$互质的数的个数,且$M \leq N$.然后根据欧拉函数的相关性质很容易得出这道题的答案为$\frac{\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]沙拉公主的困惑——数论

    题目大意 求 \[\sum_{i = 1}^{N!} [gcd(i, M!) = 1]\] 题解 显然,题目就是求 \[N!(1-\frac{1}{p_1})(1-\frac{1}{p_2})...\ ...

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

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

  8. 【BZOJ2186】[Sdoi2008]沙拉公主的困惑 线性筛素数

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

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

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

随机推荐

  1. HAWQ取代传统数仓实践(七)——维度表技术之维度子集

    有些需求不需要最细节的数据.例如更想要某个月的销售汇总,而不是某天的数据.再比如相对于全部的销售数据,可能对某些特定状态的数据更感兴趣等.此时事实数据需要关联到特定的维度,这些特定维度包含在从细节维度 ...

  2. 4.CRT远程连接的使用

    目录: 1.为什么需要远程连接? 2.一般的远程连接工具有哪些? 3.远程连接的原理? 4.远程连接的软件的功能和使用相关技巧? 1.为什么选择远程连接? 因为在实际工作中,机房一般都不可能在办公室, ...

  3. Linux 监视文件、文件夹改动

    /******************************************************************** * Linux 监视文件.文件夹改动 * 说明: * 主要是 ...

  4. LeetCode — (1)

    摘要: Nim Game.WordPattern.Move zeros.First Bad version.Ugly Number五个算法的python实现. 一个月多没更新,大概是因为状态一直不太好 ...

  5. 【MFC】MFC绘图不闪烁——双缓冲技术

    MFC绘图不闪烁——双缓冲技术[转] 2010-04-30 09:33:33|  分类: VC|举报|字号 订阅 [转自:http://blog.163.com/yuanlong_zheng@126/ ...

  6. 数据库模式显示的Swing表格

    http://code.google.com/p/simpleframework/ 是一个国内开源的JavaWeb框架,但其net.simpleframework.swing包里面提供了一个超强的Sw ...

  7. IDEA生成serialVersionUID的警告

    默认情况下Intellij IDEA是关闭了继承了java.io.Serializable的类生成serialVersionUID的警告.如果需要ide提示生成serialVersionUID,那么需 ...

  8. Angular2常用命令

    一.常用命令 1.1 npm config list配置项目 可进行相关代理配置,通常可以配置在网络环境较差的情况下,配置相关代理.相关的设置命令如图: 1.2 ng 新建启动项目 ng new pr ...

  9. 老齐python-基础1

    1.基本对象类型     1.1数: >>> 3 #基本数字 3 >>> 3333 3333 >>> 3.222 3.222 >>&g ...

  10. 浅谈FPGA有限状态机

    状态机几乎可以实现一切时序电路. 有限状态机(FiniteStateMachine, FSM),根据状态机的输出是否与输入有关,可分为Moore型状态机和Mealy型状态机.Moore型状态机输出仅仅 ...