【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 ...
随机推荐
- 在openSUSE 13.1上用gem安装rails无反应: gem install rails
解决方案: gem install rails -V ....其实他本身在后台运行,白白的给他中断好多次,用-V这个选项就可以直接回显信息了
- UVA 11992 Fast Matrix Operations (降维)
题意:对一个矩阵进行子矩阵操作. 元素最多有1e6个,树套树不好开(我不会),把二维坐标化成一维的,一个子矩阵操作分解成多条线段的操作. 一次操作的复杂度是RlogC,很容易找到极端的数据(OJ上实测 ...
- TextView中使用Linkify添加超链接
首先,在TextView所属xml配置文件中,直接添加android:autoLink特性即可,它支持一个或多个(用分割线)自定义的值:none.web.email.phone或all. 另外, ...
- alibaba druid监控页面的使用配置
一.Maven中添加Durid连接池依赖 <!-- druid连接池 --> <dependency> <groupId>com.alibaba</group ...
- Url Rewrite 重写
前几天看到园子里一篇关于 Url 重写的文章<获取ISAPI_Rewrite重写后的URL>, URL-Rewrite 这项技术早已不是一项新技术了,这个话题也已经被很多人讨论过多次.搜索 ...
- (转发)IOS动画中的枚举UIViewAnimationOptions
若本帖转自(博客园·小八究):http://www.cnblogs.com/xiaobajiu/p/4084747.html 可怜目前天朝搜不到什么有价值的东西方便学习,在这里方便初学者. 首先这个枚 ...
- 关于OnTimer()使用
OnTimer()其实是用来响应WM_TIMER消息的,其实OnTimer()就是一个回调函数,不过是系统默认的,当用户使用SetTimer()函数设定一个定时器的时候,只要是第三个参数为NULL,则 ...
- NOIP模拟赛 某种数列问题
众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe)去研究一 ...
- RSA非对称加密算法实现过程
RSA非对称加密算法实现过程 非对称加密算法有很多,RSA算法就是其中比较出名的算法之一,下面是具体实现过程 <?php /** */ class Rsa { /** * private key ...
- 【mysql】mysql 备份脚本
#! /bin/bash HOST=localhost USER=root PASSWORD=password DATE_STR=$(date '+%F--%T') ERROR_LOG=/usr/ ...