#莫比乌斯反演,欧拉函数#洛谷 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 ...
随机推荐
- android 逆向笔记
壳检测工具 GDA 2. 逆向分析APP 一般流程 1. 使用自动化检测工具检测APP是否加壳,或者借助一些反编译工具依靠经验判断是否加壳 2. 如果apk加壳,则需要先对apk进行脱壳 3. 使用` ...
- [2023本地存储方案](https://www.cnblogs.com/fangchaoduan/p/17608006.html)
2023本地存储方案 本地存储方案 cookie 本地存储:有期限的限制,可以自己设置过期期限.在期限内,不论页面刷新还是关闭,存储的信息都还会存在. localStorage 本地持久化存储:页面刷 ...
- Taro兼容h5的一些小问题
背景:先做了小程序,现在需要兼容h5 问题一:Image组件mode属性设置为aspectFill在h5上没效果 解决方法:给img加样式 object-fit: cover (例子如下) // js ...
- python模块imghdr-----推测图像类型
官方文档 https://docs.python.org/zh-cn/3/library/imghdr.html#module-imghdr 用处 模块推测文件或字节流中的图像的类型 imghdr.w ...
- 【LeetCode回溯算法#03】电话号码的字母组合(数字映射字母)
电话号码的字母组合 力扣题目链接(opens new window) 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任 ...
- Spark任务性能调优总结
一.shuffle调优 大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO.序列化.网络数据传输等操作.因此,如果要让作业的性能更上一层楼,就有必要对shuf ...
- Java 数组对象 小测试
1 package com.bytezero.bank; 2 /** 3 * 4 * @Description 5 * @author Bytezero·zhenglei! Email:4204982 ...
- js收藏网页功能,纠正网上乱转没求证的案例
网站一般流行以下收藏代码 function AddFavorite(title, url){ try{ //ie收藏 window.external.addFavorite(url, title); ...
- Fiddler 延迟请求
1.开启浏览器代理 2.fiddler设置要抓取的域名 3.设置fiddler代理端口 Tools->Options->Connections 4.设置接口延时 5.访问页面即可延时此接口
- vscode ctrl + 鼠标左键 点击 不进入组件,弹出一个框再点才进入的问题 目录名和vue文件名 开头不能大写 需从起生效
vscode ctrl + 鼠标左键 点击 不进入组件,弹出一个框再点才进入的问题 目录名和vue文件名 开头不能大写 需从起生效 就是这个,很讨厌,原来是开头不能大写字母的问题造成的. 小写字母就没 ...