#莫比乌斯反演,欧拉函数#洛谷 5518 [MtOI2019]幽灵乐团
分析
前置知识:\(\sum_{d|n}\mu(d)=[n==1]\),\(\sum_{d|n}\mu(d)\frac{n}{d}=\varphi(n)\)
把最小公倍数拆开可以得到
\]
一个一个类型解决,并且拆开分子分母,先看 \(type=0\) 的情况,
分子 \(=\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C(ij)=[(A!)^B(B!)^A]^C\)
分母以 \(\gcd(i,j)\) 为例也即是 \(=\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C\gcd(i,j)\)
枚举 \(d=\gcd(i,j)\) 也即是
\]
\]
枚举 \(i=dt\) 即
\]
设 \(f(n)=\prod_{d|n}d^{\mu\left(\frac{n}{d}\right)}\),然后整个就可以整除分块。
设 \(S1(A,B)=\prod_{i=1}^{\min\{A,B\}}f(i)^{\left\lfloor\frac{A}{i}\right\rfloor\left\lfloor\frac{B}{i}\right\rfloor}\)
那么合起来当 \(type=0\) 时答案为 \(\large \frac{\left[(A!)^B(B!)^A\right]^C}{S1(A,B)^CS1(A,C)^B}\)
再看 \(type=1\) 的情况,设 \(c2(n)=\binom{n+1}{2}\) 分子为
\]
设 \(g(n)=\prod_{i=1}^n\left(i^i\right)\),那也就是 \(=\left[g(A)^{c2(B)}g(B)^{c2(A)}\right]^{c2(C)}\)
分母同样以 \(\gcd(i,j)\) 为例, 即为 \(\prod_{i=1}^A\prod_{j=1}^B\prod_{k=1}^C\gcd(i,j)^{ijk}\)
枚举 \(d=\gcd(i,j)\),也即是
\]
\]
枚举 \(i=dt\) 即
\]
设 \(S2(A,B)=\prod_{i=1}^{\min\{A,B\}}f(i)^{i^2\left\lfloor\frac{A}{i}\right\rfloor\left\lfloor\frac{B}{i}\right\rfloor}\)
那么合起来当 \(type=1\) 时答案为 \(\large \frac{\left[g(A)^{c2(B)}g(B)^{c2(A)}\right]^{c2(C)}}{S2(A,B)^CS2(A,C)^B}\)
再看 \(type=2\) 的情况,
分子 \(=\prod_{i=1}^{A}\prod_{j=1}^B\prod_{k=1}^C(ij)^{\gcd(i,j,k)}\)
枚举 \(d=\gcd(i,j,k)\),也即是
\]
\]
枚举 \(o=dt\),也即是
\]
\]
分母如果先枚举 \(\gcd(i,j)\) 里面向下取整的式子无法预处理出来,
以 \(\gcd(i,j)\) 为例,不妨先枚举 \(\gcd(i,j,k)\)
\]
\]
枚举 \(o=dt\),也即是
\]
实际上由于分子分母都具有 \(\large \prod_{o=1}^{\min\{A,B,C\}}o^{2\varphi(o)\left\lfloor\frac{A}{o}\right\rfloor\left\lfloor\frac{B}{o}\right\rfloor\left\lfloor\frac{C}{o}\right\rfloor}\)(分母上式要算两次)
设 \(\large S3(A,B,C)=\prod_{o=1}^{\min\{A,B,C\}}\prod_{i=1}^{\left\lfloor\frac{A}{o}\right\rfloor}\prod_{j=1}^{\left\lfloor\frac{B}{o}\right\rfloor}{\gcd(i,j)}^{\varphi(o)\left\lfloor\frac{C}{o}\right\rfloor}\)
所以合起来可以进行第一步化简
继续看分母,枚举 \(d=\gcd(i,j)\)
\]
\]
枚举 \(i=dt\),则
\]
\]
那么 \(\large S3(A,B,C)=\prod_{o=1}^{\min\{A,B,C\}}\left(\prod_{i=1}^{\min\left\{\left\lfloor\frac{A}{o}\right\rfloor,\left\lfloor\frac{B}{o}\right\rfloor,\left\lfloor\frac{C}{o}\right\rfloor\right\}}f(i)^{\left\lfloor\frac{A}{oi}\right\rfloor\left\lfloor\frac{B}{oi}\right\rfloor}\right)^{\varphi(o)\left\lfloor\frac{C}{o}\right\rfloor}\)
合起来当 \(type=2\) 时答案为
\]
以上需要预处理的函数都可以在 \(O(n\log{n})\) 内预处理出来,瓶颈时间复杂度即求 \(S3(A,B,C)\) 时为 \(O(Tn^{\frac{3}{4}}\log{n})\)
代码
#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
const int N=100011;
int mu[N],phi[N],fac[N],inv[N],prime[N],c2[N];
int Cnt,f[N],F[N],invf[N],g[N],invF[N],T,mod,Phi;
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
int ksm(int x,int y){
int ans=1;
for (;y;y>>=1,x=1ll*x*x%mod)
if (y&1) ans=1ll*ans*x%mod;
return ans;
}
int mo(int x,int y){return x+y>=Phi?x+y-Phi:x+y;}
int min(int a,int b){return a<b?a:b;}
void Pro(int n){
mu[1]=phi[1]=fac[0]=fac[1]=inv[0]=inv[1]=1;
for (int i=2;i<=n;++i) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for (int i=2;i<=n;++i) fac[i]=1ll*fac[i-1]*i%mod;
for (int i=2;i<=n;++i){
if (!phi[i]) prime[++Cnt]=i,phi[i]=i-1,mu[i]=-1;
for (int j=1;j<=Cnt&&prime[j]<=n/i;++j){
phi[i*prime[j]]=phi[i]*phi[prime[j]];
if (i%prime[j]==0){
phi[i*prime[j]]+=phi[i];
break;
}
mu[i*prime[j]]=-mu[i];
}
}
for (int i=1;i<=n;++i) phi[i]=mo(phi[i],phi[i-1]);
for (int i=1;i<=n;++i) c2[i]=(c2[i-1]+i)%Phi;
for (int i=0;i<=n;++i) f[i]=1,g[i]=ksm(i,i);
for (int i=1;i<=n;++i) g[i]=1ll*g[i-1]*g[i]%mod;
for (int i=1;i<=n;++i)
for (int j=i;j<=n;j+=i)
if (mu[j/i]==1) f[j]=1ll*f[j]*i%mod;
else if (mu[j/i]==-1) f[j]=1ll*f[j]*inv[i]%mod;
for (int i=0;i<=n;++i) F[i]=ksm(f[i],1ll*i*i%Phi);
for (int i=1;i<=n;++i) f[i]=1ll*f[i-1]*f[i]%mod;
for (int i=1;i<=n;++i) F[i]=1ll*F[i-1]*F[i]%mod;
for (int i=1;i<=n;++i) inv[i]=1ll*inv[i-1]*inv[i]%mod;
for (int i=0;i<=n;++i) invf[i]=ksm(f[i],mod-2);
for (int i=0;i<=n;++i) invF[i]=ksm(F[i],mod-2);
}
int query1(int n,int m){
int t=min(n,m),ans=1;
for (int l=1,r;l<=t;l=r+1){
r=min(n/(n/l),m/(m/l));
ans=1ll*ans*ksm(1ll*f[r]*invf[l-1]%mod,1ll*(n/l)*(m/l)%Phi)%mod;
}
return ans;
}
int query2(int n,int m){
int t=min(n,m),ans=1;
for (int l=1,r;l<=t;l=r+1){
r=min(n/(n/l),m/(m/l));
ans=1ll*ans*ksm(1ll*F[r]*invF[l-1]%mod,1ll*c2[n/l]*c2[m/l]%Phi)%mod;
}
return ans;
}
int query3(int A,int B,int C){
int t=min(A,min(B,C)),ans=1,Ans=1;
for (int l=1,r;l<=t;l=r+1){
r=min(A/(A/l),min(B/(B/l),C/(C/l)));
int _A=A/l,_B=B/l,_C=C/l,sum=1,tt=1ll*mo(phi[r],Phi-phi[l-1])*(C/l)%Phi;
Ans=1ll*Ans*ksm(1ll*ksm(fac[A/l],B/l)*ksm(fac[B/l],A/l)%mod,tt)%mod;
for (int L=1,R;L<=_A&&L<=_B;L=R+1)
R=min(_A/(_A/L),_B/(_B/L)),sum=1ll*sum*ksm(1ll*f[R]*invf[L-1]%mod,1ll*(_A/L)*(_B/L)%Phi)%mod;
ans=1ll*ans*ksm(sum,tt)%mod,sum=1,tt=1ll*mo(phi[r],Phi-phi[l-1])*(B/l)%Phi;
for (int L=1,R;L<=_A&&L<=_C;L=R+1)
R=min(_A/(_A/L),_C/(_C/L)),sum=1ll*sum*ksm(1ll*f[R]*invf[L-1]%mod,1ll*(_A/L)*(_C/L)%Phi)%mod;
ans=1ll*ans*ksm(sum,tt)%mod;
}
return 1ll*Ans*ksm(ans,mod-2)%mod;
}
int main(){
T=iut(),mod=iut(),Phi=mod-1,Pro(N-11);
for (int i=1;i<=T;++i){
int A=iut(),B=iut(),C=iut();
print(1ll*ksm(1ll*ksm(fac[A],B)*ksm(fac[B],A)%mod,C)*ksm(1ll*ksm(query1(A,B),C)*ksm(query1(A,C),B)%mod,mod-2)%mod),putchar(32);
print(1ll*ksm(1ll*ksm(g[A],c2[B])*ksm(g[B],c2[A])%mod,c2[C])*ksm(1ll*ksm(query2(A,B),c2[C])*ksm(query2(A,C),c2[B])%mod,mod-2)%mod);
putchar(32),print(query3(A,B,C)),putchar(10);
}
return 0;
}
#莫比乌斯反演,欧拉函数#洛谷 5518 [MtOI2019]幽灵乐团的更多相关文章
- $BZOJ$2818 $gcd$ 莫比乌斯反演/欧拉函数
正解:莫比乌斯反演/欧拉函数 解题报告: 传送门$QwQ$ 一步非常显然的变形,原式=$\sum_{d=1,d\in prim}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd ...
- 洛谷 - P1390 - 公约数的和 - 莫比乌斯反演 - 欧拉函数
https://www.luogu.org/problemnew/show/P1390 求 $\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} gcd(i,j) $ ...
- [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)
题目链接:https://www.luogu.org/problemnew/show/P2568#sub 题目大意: 计算$\sum_{x=1}^n\sum_{y=1}^n [gcd(x,y)==p ...
- luogu2658 GCD(莫比乌斯反演/欧拉函数)
link 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 1<=N<=10^7 (1)莫比乌斯反演法 发现就是YY的GCD,左转YY的GCD ...
- BZOJ2005:[NOI2010]能量采集(莫比乌斯反演,欧拉函数)
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得 ...
- HDU 6390 GuGuFishtion(莫比乌斯反演 + 欧拉函数性质 + 积性函数)题解
题意: 给定\(n,m,p\),求 \[\sum_{a=1}^n\sum_{b=1}^m\frac{\varphi(ab)}{\varphi(a)\varphi(b)}\mod p \] 思路: 由欧 ...
- 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)
洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...
- BZOJ4804 欧拉心算(莫比乌斯反演+欧拉函数+线性筛)
一通套路后得Σφ(d)μ(D/d)⌊n/D⌋2.显然整除分块,问题在于怎么快速计算φ和μ的狄利克雷卷积.积性函数的卷积还是积性函数,那么线性筛即可.因为μ(pc)=0 (c>=2),所以f(pc ...
- BZOJ.2705.[SDOI2012]Longge的问题(莫比乌斯反演 欧拉函数)
题目链接 \(Description\) 求\[\sum_{i=1}^n\gcd(i,n)\] \(Solution\) \[ \begin{aligned} \sum_{i=1}^n\gcd(i,n ...
- Bzoj 2818: Gcd 莫比乌斯,分块,欧拉函数,线性筛
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3241 Solved: 1437[Submit][Status][Discuss ...
随机推荐
- 案例分享:Qt工程机械真空激光焊接系统软件产品定制(西门子PLC,mysql数据库,用户权限控制,界面配置,参数定制,播放器,二维图标,rgv小车,期限控制,参数调试等)
需求 1.触摸屏控制,按照客户需求,ui由本司美工承担设计,显示分辨率1280 x 1024,同时支持鼠标操作. 2.权限控制:三种权限,分为管理员(可以定制模块界面,修改产品名称等定制化软件和 ...
- 反射,装饰器,类当中的方法,property---day24
1.反射 # ### 反射(针对于类对象 模块) '''概念:通过字符串去操作类对象或者模块当中的成员(属性方法)''' class Man(): pass class Woman(): pass c ...
- c# rdkafka 设置偏移量(offset)
参考资料: librdkafka: 如何设置Kafka消费者订阅消息的起始偏移位置 领导要求kafka消费者端消费最新的数据. 不知道怎么设置偏移量,查了资料. 用惯了封装好的东西,都不知道怎么设置了 ...
- 【Azure 服务总线】有何办法可以把原来老环境的Azure Service Bus 配置快速复制到新环境配置,而且原环境不删除
问题描述 有何办法可以把原来老环境的Azure Service Bus 配置快速复制到新环境配置,而且原环境不删除 问题解答 在通常的做法中,是可以在Service Bus所在的资源组中,通过&quo ...
- 【Azure 应用服务】Azure App Service多实例中,出现某一个实例CPU居高不下的情况,如何重启单个实例呢?
问题描述 在使用App Service服务中,当多实例中,其中一个实例出现高CPU,高Memory的情况,为了尽可能少的影响正在运行的应用,需要单独重启某一个实例的情况下,如何手动操作呢? 问题解答 ...
- 【Azure 应用服务】[App Service For Linux(Function) ] Python ModuleNotFoundError: No module named 'MySQLdb'
问题描述 在使用Azure Function创建新的Python Function时,使用MySQLdb连接数据库时候出现 ModuleNotFoundError: No module named ' ...
- 浅入ABP(2):添加基础集成服务
浅入ABP(2):添加基础集成服务 版权护体作者:痴者工良,微信公众号转载文章需要 <NCC开源社区>同意. 目录 浅入ABP(2):添加基础集成服务 定义一个特性标记 全局统一消息格式 ...
- Nebula Graph 源码解读系列 | Vol.00 序言
本文首发于 Nebula Graph Community 公众号 Nebula Graph 是由杭州欧若数网科技有限公司(官网:https://www.vesoft.com/cn/)开源的一款分布式图 ...
- [Python] 超简单的 超星学习通自动签到
目录 概述 代码 其他的 文件编码问题 windows 和 linux下换行符不同的问题 概述 今天两节课的签到都错过了 /(ㄒoㄒ)/~~ 所以决定花点时间做一个自动签到的工具 经过观察发现超星的结 ...
- 10、zookeeper的leader选举
leader选举 服务器状态 looking:寻找leader状态.当服务器处于该状态时,它会认为当前集群中没有leader,因此需要进入leader选举状态 following:跟随着状态.表明当前 ...