【Luogu】P2155沙拉公主的困惑(数论)
数论果然是硬伤qwq 还是智商上的硬伤
我们来讲两个道理
No.1 求1~i!中与i!互质的数的个数
实际上就是求i!的欧拉函数
有如下递推式:
f[1]=1
if(i为合数) f[i]=f[i-1]*i;
if(i为素数) f[i]=f[i-1]*(i-1);
证明如下
首先我们有个神奇引理。叫做:如果n=p1a1*p2a2*………………*pkak是n的素数幂乘积表达式,那么有
$phi[n]=n*\frac{p1-1}{p1}*\frac{p2-1}{p2}*……*\frac{pk-1}{pk}$
所以说我们的$phi[n!]=n!*\frac{p1-1}{p1}*\frac{p2-1}{p2}*……*\frac{pk-1}{pk}$
那么首先我们知道n!是从1乘到n(废话)
那么注意(敲黑板)phi[n]的质因子就是1到n里的质数对不对
我们现在就把所有的分母约掉
所以phi[n]就变成了(所有合数的乘积)*(所有质数-1的乘积)
于是递推式得证
然后第二个问题,就是如果gcd(a,b)==1,那么gcd(a*k+b,b)=1
这个东西有什么用呢?
我们设n!为mul[n]。
由于n>=m,所以mul[n]>=mul[m],并且mul[n]一定是mul[m]的整数倍。
这样我们发现$mul[n]=mul[m]*\frac{mul[n]}{mul[m]}$
所以说1到mul[n]中和mul[m]互质的,就等于1~mul[m]中与mul[m]互质的,再乘上$\frac{mul[n]}{mul[m]}$
然后逆元乱搞搞就好了qwq
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<cstdlib>
#define maxn 10000020 inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} bool s[maxn];
int prime[maxn],tot;
int mul[maxn];
int f[maxn]; long long Pow(long long n,int x,int p){
long long ans=;
while(x){
if(x&) ans=(ans*n)%(long long)p;
n=(n*n)%(long long)p;
x>>=;
}
return ans;
} int main(){
int T=read(),p=read();
s[]=mul[]=f[]=;
for(int i=;i<=maxn;++i){
if(!s[i])
prime[++tot]=i;
for(int j=;j<=tot&&(long long)prime[j]*i<=maxn;++j){
s[i*prime[j]]=;
if(!(i%prime[j])) break;
}
}
for(int i=;i<=maxn;++i){
mul[i]=((long long)mul[i-]*(long long)i)%(long long)p;
if(s[i]) f[i]=((long long)f[i-]*(long long)i)%(long long)p;
else f[i]=((long long)f[i-]*(long long)(i-))%(long long)p;
}
while(T--){
int n=read(),m=read();
printf("%lld\n",(long long)(((long long)f[m]*(long long)mul[n])%(long long)p*Pow(mul[m],p-,p))%p);
}
return ;
}
【Luogu】P2155沙拉公主的困惑(数论)的更多相关文章
- 【bzoj2186】: [Sdoi2008]沙拉公主的困惑 数论-欧拉函数
[bzoj2186]: [Sdoi2008]沙拉公主的困惑 考虑当 gcd(a,b)=1 则 gcd(nb+a,b)=1 所以[1,N!]与M!互质的个数就是 筛出[1,M]所有的素数p[i] 以及逆 ...
- 【BZOJ2186】【SDoi2008】沙拉公主的困惑 数论
Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...
- BZOJ 2186 SDOI2008 沙拉公主的困惑 数论
题目大意:给定询问组数T和取模数P,每次询问给定两个整数n和m,求1~(n!)的数中与m!互质的数个个数模P (m<=n) 首先T<=1W,暴力肯定过不去,我们须要预处理一些东西 首先我们 ...
- [bzoj2186][Sdoi2008]沙拉公主的困惑——数论
题目大意 求 \[\sum_{i = 1}^{N!} [gcd(i, M!) = 1]\] 题解 显然,题目就是求 \[N!(1-\frac{1}{p_1})(1-\frac{1}{p_2})...\ ...
- 【BZOJ2186】沙拉公主的困惑(数论)
[BZOJ2186]沙拉公主的困惑(数论) 题面 BZOJ 题解 考虑答案是啥 先假设\(n=m\) 现在求的就是\(\varphi(m!)\) 但是现在\(n!\)是\(m!\)的若干倍 我们知道 ...
- 洛咕 P2155 [SDOI2008]沙拉公主的困惑
洛咕 P2155 [SDOI2008]沙拉公主的困惑 有个结论,就是如果\(gcd(a,b)=1\),那么\(gcd(a+kb,b)=1\).证明比较显然. 所以这个题目要问的\(n!\)就可以分成\ ...
- 洛谷 P2155 [SDOI2008]沙拉公主的困惑 解题报告
P2155 [SDOI2008]沙拉公主的困惑 题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为\(1\)到\(N\)的阶乘,但是,政府只发行编号与\(M!\ ...
- [bzoj2186][Sdoi2008]沙拉公主的困惑_数论
沙拉公主的困惑 bzoj-2186 Sdoi-2008 题目大意:求N!中与M!互质的数的个数. 注释:$1\le N,M\le 10^7$. 想法:显然是求$\phi(M!)$.这东西其实只需要将数 ...
- Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2560 Solved: 857[Submit][St ...
随机推荐
- Android视图控件架构分析之View、ViewGroup
在Android中,视图控件大致被分为两类,即ViewGroup和View,ViewGroup控件作为父控件,包含并管理着子View,通过ViewGroup和View便形成了控件树,各个ViewGou ...
- Python3之偏函数
通过设定参数的默认值,可以降低函数调用的难度.偏函数可以做到这一点 int()函数可以把字符串转换成十进制整数,当传入字符串时,int()默认把字符串为十进制 >>> int('12 ...
- 2018.4.21 如何正确快速安装/卸载云服务器Centos7安装GUI图形化界面GNOME桌面环境
为云服务哦Centos安装图形化界面GNOME .KDE 1.开始前先验证一下能不能上网 ping www.baidu.com 2.接下来开始安装X(X Window System),命令为 yum ...
- jQuery JavaScript Library v3.2.1
/*! * jQuery JavaScript Library v3.2.1 * https://jquery.com/ * * Includes Sizzle.js * https://sizzle ...
- Vue处理ajax请求
Ajax请求 1>解决跨域问题 1.1前端解决.只需要在vue.config.js中增加devServer节点增加代理: const path = require("path" ...
- UML类图中的六种线条与六种关系
1.泛化(generalize) 实线空心三角箭头. 2.实现(realize) 虚线空心三角箭头. 3.聚合(aggregation) 实线空心菱形箭头. 4.组合(composition) 实线实 ...
- 【费用流】bzoj1834: [ZJOI2010]network 网络扩容
还是稍微记一下这个拆点模型吧 Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求: 1.在不扩容的情况下,1到N的最大流: ...
- matplotlib绘图(一)
绘制这折现图 导入响应的包 import numpy as npimport pandas as pdfrom pandas import Series,DataFrame%matplotlib in ...
- 14Shell脚本—判断语句
判断语句 Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其他随机数值. 条件测试语法的执行格式为 [ 条件表达式 ],切记,条件表达式两边均应有一个空格. 条 ...
- Python入门:Python基础笔记
(C语言:)C语言是相对C++.C#.Java等语言更接近底层,并且一些硬件编程都可以使(只能使用)C语言.另外C语言学起来相对困难,因为涉及到指针,指针也是语言接近底层语言的一个特征.目前编写较大的 ...