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. Wordpress在主题或者插件中自定义存储附件的方法

    1.前端使用form表单 //单文件上传,我的业务需求中限制了必须上传图片 <input type="file" name="singlename" ac ...

  2. findContours()的使用崩溃问题

    之前用的好好的,不知咱弄得就突然崩溃.然后网上搜了半天. 各种试,不行. 有一种改变代码方式的做法,可行,但是心里用着很是不爽.vector<vector<Point>>con ...

  3. IntelliJ IDEA中使用Git

    IntelliJ IDEA下使用Git IntelliJ IDEA下配置Git:git clone.git checkout.git diff.git log.git commit.git push. ...

  4. 关于djangoadmin的一个博客

    http://www.cnblogs.com/linxiyue/category/569717.html

  5. 【Xamarin 】MonoTouch - UIImageView响应点击事件

    //圆角头像 UIImageView _avatarView = new UIImageView(new RectangleF(_blockSpace, _blockSpace, 2 * _avata ...

  6. 【android】Socket简单用法

    Socket通常也称做”套接字“,用于描述IP地址和端口,废话不多说,它就是网络通信过程中端点的抽象表示.值得一提的是,Java在包java.net中提供了两个类Socket和ServerSocket ...

  7. android中MediaPlayer类的用法

    用法直接看sample package com.turtle920.androidaudioprocess; import android.media.MediaPlayer; import andr ...

  8. thinkPHP增删改查的方法案例

    thinkphp对数据库增删改查进行了封装操作,使得使用更加方便,但是不一定灵活. 可以用封装的用,需要写sql,可以执行sql. 1.原始的 $Model = new Model(); // 实例化 ...

  9. Rest之路 - Rest架构中的重要概念

    资源 在Rest的架构之内,讲一切内容都是为资源.每一个资源都被定义为一个URI. 格式: <protocol>://<service-name>/<ResourceTy ...

  10. cassandra学习 四 数据模型

    Keyspace(建空间): 可以理解为Database: Replication factor: 复制因数 :   Replica placement srategy: 复制策略,默认是Simple ...