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

题面

BZOJ

题解

考虑答案是啥

先假设\(n=m\)

现在求的就是\(\varphi(m!)\)

但是现在\(n!\)是\(m!\)的若干倍

我们知道

\(gcd(x,y)=gcd(x+ky,y)\)

所以,相当于

每隔\(m!\),答案增长的值都是\(\varphi(m!)\)

所以

我们可以得出

\[ans=\frac{n!}{m!}\varphi(m!)
\]

后面的\(\varphi\)可以直接拆开,枚举质因数

\[ans=\frac{n!}{m!}·m!\frac{\prod (p_i-1)}{\prod p_i}
\]

\[ans=n!\frac{\prod (p_i-1)}{\prod p_i}
\]

其中,\(pi<=m\)

所以,预处理\(n!\),质数的前缀乘,还有质数\(-1\)的前缀乘

至于逆元就不要预处理了(慢的死)

要用的时候直接快速幂算一下

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define MAX 10000000
inline int read()
{
int x=0,t=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int R;
int n,m;
bool zs[MAX+1];
int pri[MAX/10],tot,jc[MAX+1];
int inv[MAX+1],pinv[MAX/10],ppri[MAX/10];
int Pos[MAX+1];
int fpow(int a,int b)
{
int s=1;
while(b){if(b&1)s=1ll*s*a%R;a=1ll*a*a%R;b>>=1;}
return s;
}
void pre()
{
zs[1]=true;inv[1]=jc[1]=1;
for(int i=2;i<=MAX;++i)
{
jc[i]=1ll*jc[i-1]*i%R;
if(!zs[i])pri[++tot]=i;//,inv[i]=fpow(i,R-2);
for(int j=1;j<=tot&&i*pri[j]<=MAX;++j)
{
zs[i*pri[j]]=true;
//inv[i*pri[j]]=1ll*inv[i]*inv[pri[j]]%R;
if(i%pri[j]==0)break;
}
}
pinv[0]=ppri[0]=1;
for(int i=1;i<=tot;++i)pinv[i]=1ll*pinv[i-1]*pri[i]%R;
for(int i=1;i<=tot;++i)ppri[i]=1ll*ppri[i-1]*(pri[i]-1)%R;
for(int i=1;i<=tot;++i)
for(int j=pri[i];j<pri[i+1];++j)
Pos[j]=i;
}
int Query(int n,int m)
{
return 1ll*jc[n]*fpow(pinv[Pos[m]],R-2)%R*ppri[Pos[m]]%R;
}
int main()
{
int T=read();R=read();
pre();
while(T--)
{
n=read();m=read();
printf("%d\n",Query(n,m));
}
return 0;
}

【BZOJ2186】沙拉公主的困惑(数论)的更多相关文章

  1. [BZOJ2186]沙拉公主的困惑

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

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

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

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

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

  4. 【BZOJ2186】【SDoi2008】沙拉公主的困惑 数论

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

  5. [bzoj2186][Sdoi2008]沙拉公主的困惑——数论

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

  6. BZOJ 2186 SDOI2008 沙拉公主的困惑 数论

    题目大意:给定询问组数T和取模数P,每次询问给定两个整数n和m,求1~(n!)的数中与m!互质的数个个数模P (m<=n) 首先T<=1W,暴力肯定过不去,我们须要预处理一些东西 首先我们 ...

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

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

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

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

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

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

随机推荐

  1. DataGrid 拖动 附加属性类

    项目需要实现一个DataGrid拖动排序,于是参考网上一些资源然后,修改了下实现了一个附加属性类,如下 使用方法 <DataGrid x:Name="shareGrid" t ...

  2. 在CentOS下安装crontab服务

    1. 确认crontab是否安装: 执行 crontab 命令如果报 command not found,就表明没有安装 2. 安装 crontab 执行 yum install -y vixie-c ...

  3. jenkins中使用rsync, scp命令

    jenkins 中使用 rsync 命令 是出现一些错误输出 Host key verification failed. rsync: connection unexpectedly closed ( ...

  4. css为第几个倍数元素添加样式

    //3n就是3的倍数都加这个样式*/.list li:nth-child(3n){ border-bottom:1px;}

  5. 存个emacs配置

    emacs配置 (global-set-key [f9] 'compile-file) (global-set-key [f10] 'gud-gdb) (global-set-key (kbd &qu ...

  6. No new migrations found. Your system is up-to-date.处理

    显然是migrations表中存储的相关操作记录了,删除就好了!!!

  7. css渲染(二) 文本

    一.文本样式  首行缩进 text-indent 首行缩进是将段落的第一行缩进,这是常用的文本格式化效果.一般地,中文写作时开头空两格.[注意]该属性可以为负值:应用于: 块级元素(包括block和i ...

  8. Java数字签名——RSA算法

    数字签名:带有密钥(公钥,私钥)的消息摘要算法. 验证数据的完整性,认证数据的来源,抗否性 OSI参考模型 私钥签名,公钥验证 签名算法:RSA,DSA,ECDSA 算法1 :RSA MD,SHA两类 ...

  9. [Note] Stream Computing

    Stream Computing 概念对比 静态数据和流数据 静态数据,例如数据仓库中存放的大量历史数据,特点是不会发生更新,可以利用数据挖掘技术和 OLAP(On-Line Analytical P ...

  10. 和scikit-learn打个招呼

    1.先装对应的库.不能偷懒,都得装,不然飞不起来. pip install scikit-learn pip install numpy pip install scipy 2.测试如下代码. imp ...