Description

求∏i=1A∏j=1B∏k=1C([i,j](i,k))f(type)\prod_{i=1}^{A}\prod_{j=1}^{B}\prod_{k=1}^{C}({[i,j]\over (i,k)})^{f(type)}i=1∏A​j=1∏B​k=1∏C​((i,k)[i,j]​)f(type)
f(0)=1,f(1)=ijk,f(2)=(i,j,k)f(0)=1,f(1)=ijk,f(2)=(i,j,k)f(0)=1,f(1)=ijk,f(2)=(i,j,k)
设T为数据组数
A,B,C<=10^5,T<=70

Solution

被车万骗进来的我做了一天的数学题
三合一差评
公式太多了会跳步,建议手推
所有的除法都是下取整
M表示min(a,b,c)或min(a,b)

显然分成两部分,一部分是∏i=1A∏j=1B∏k=1Cif(type)\prod_{i=1}^{A}\prod_{j=1}^{B}\prod_{k=1}^{C}i^{f(type)}∏i=1A​∏j=1B​∏k=1C​if(type)
另一部分是∏i=1A∏j=1B∏k=1C(i,j)f(type)\prod_{i=1}^{A}\prod_{j=1}^{B}\prod_{k=1}^{C}(i,j)^{f(type)}∏i=1A​∏j=1B​∏k=1C​(i,j)f(type)
考虑第一部分
type=1直接预处理阶乘快速幂
type=2也是预处理∏i=1nii\prod_{i=1}^{n}i^i∏i=1n​ii快速幂
type=3推式子:
∏i=1A∏j=1B∏k=1Ci(i,j,k)\prod_{i=1}^{A}\prod_{j=1}^{B}\prod_{k=1}^{C}i^{(i,j,k)}∏i=1A​∏j=1B​∏k=1C​i(i,j,k)
∏d=1M∏i=1A/d(id)d∑j=1B/d∑k=1C/d[(i,j,k)=1]\prod_{d=1}^{M}\prod_{i=1}^{A/d}(id)^{d\sum_{j=1}^{B/d}\sum_{k=1}^{C/d}[(i,j,k)=1]}∏d=1M​∏i=1A/d​(id)d∑j=1B/d​∑k=1C/d​[(i,j,k)=1]
∏x=1M∏d=1M/x∏i=1A/xd(idx)dμ(x)(B/xd)(C/xd)\prod_{x=1}^{M}\prod_{d=1}^{M/x}\prod_{i=1}^{A/xd}(idx)^{d\mu(x)(B/xd)(C/xd)}∏x=1M​∏d=1M/x​∏i=1A/xd​(idx)dμ(x)(B/xd)(C/xd)
∏T=1M∏i=1A/T(iT)∑d∣Tdμ(T/x)(B/T)(C/T)\prod_{T=1}^{M}\prod_{i=1}^{A/T}(iT)^{\sum_{d|T}d\mu(T/x)(B/T)(C/T)}∏T=1M​∏i=1A/T​(iT)∑d∣T​dμ(T/x)(B/T)(C/T)
∏T=1M∏i=1A/T(iT)φ(T)(B/T)(C/T)\prod_{T=1}^{M}\prod_{i=1}^{A/T}(iT)^{\varphi(T)(B/T)(C/T)}∏T=1M​∏i=1A/T​(iT)φ(T)(B/T)(C/T)
预处理∏i=1niφ(i)\prod_{i=1}^{n}i^{\varphi(i)}∏i=1n​iφ(i)+分块即可

考虑第二部分
type=1求∏i=1A∏j=1B(i,j)\prod_{i=1}^{A}\prod_{j=1}^{B}(i,j)∏i=1A​∏j=1B​(i,j)再快速幂
∏d=1Md∑i=1A/d∑j=1B/d[(i,j)=1]\prod_{d=1}^{M}d^{\sum_{i=1}^{A/d}\sum_{j=1}^{B/d}[(i,j)=1]}∏d=1M​d∑i=1A/d​∑j=1B/d​[(i,j)=1]
∏x=1M∏d=1M/xd(A/xd)(B/xd)μ(x)\prod_{x=1}^{M}\prod_{d=1}^{M/x}d^{(A/xd)(B/xd)\mu(x)}∏x=1M​∏d=1M/x​d(A/xd)(B/xd)μ(x)
∏T=1M∏d∣Tdμ(T/d)(A/T)(B/T)\prod_{T=1}^{M}\prod_{d|T}d^{\mu(T/d)(A/T)(B/T)}∏T=1M​∏d∣T​dμ(T/d)(A/T)(B/T)
n log n预处理+分块
type=2同理,不再过多阐述
type=3
∏i=1A∏j=1B∏k=1C(i,j)(i,j,k)\prod_{i=1}^{A}\prod_{j=1}^{B}\prod_{k=1}^{C}(i,j)^{(i,j,k)}∏i=1A​∏j=1B​∏k=1C​(i,j)(i,j,k)
∏d=1min(A,B)d(∑k=1C(k,d))(∑i=1A/d∑j=1B/d[(i,j)=1)]\prod_{d=1}^{min(A,B)}d^{(\sum_{k=1}^{C}(k,d))(\sum_{i=1}^{A/d}\sum_{j=1}^{B/d}[(i,j)=1)]}∏d=1min(A,B)​d(∑k=1C​(k,d))(∑i=1A/d​∑j=1B/d​[(i,j)=1)]
∏x=1min(A,B)∏d=1min(A,B)/xdμ(x)(∑k=1C(k,d))(A/xd)(B/xd)\prod_{x=1}^{min(A,B)}\prod_{d=1}^{min(A,B)/x}d^{\mu(x)(\sum_{k=1}^{C}(k,d))(A/xd)(B/xd)}∏x=1min(A,B)​∏d=1min(A,B)/x​dμ(x)(∑k=1C​(k,d))(A/xd)(B/xd)
考虑∑k=1C(k,d)\sum_{k=1}^{C}(k,d)∑k=1C​(k,d)
∑T∣dT∑k=1C/T[(k,d/T)=1]\sum_{T|d}T\sum_{k=1}^{C/T}[(k,d/T)=1]∑T∣d​T∑k=1C/T​[(k,d/T)=1]
∑x∣dμ(x)∑T∣dxT(C/Tx)\sum_{x|d}\mu(x)\sum_{T|{d\over x}}T(C/Tx)∑x∣d​μ(x)∑T∣xd​​T(C/Tx)
∑i∣d(C/i)∑x∣iμ(x)ix\sum_{i|d}(C/i)\sum_{x|i}\mu(x){i\over x}∑i∣d​(C/i)∑x∣i​μ(x)xi​
∑i∣d(C/i)φ(i)\sum_{i|d}(C/i)\varphi(i)∑i∣d​(C/i)φ(i)
原式=∏i=1M∏x=1min(A,B)/i∏d=1min(A,B)/ix(id)(C/i)φ(i)μ(x)(A/idx)(B/idx)\prod_{i=1}^{M}\prod_{x=1}^{min(A,B)/i}\prod_{d=1}^{min(A,B)/ix}(id)^{(C/i)\varphi(i)\mu(x)(A/idx)(B/idx)}∏i=1M​∏x=1min(A,B)/i​∏d=1min(A,B)/ix​(id)(C/i)φ(i)μ(x)(A/idx)(B/idx)
分成两部分
∏i=1Mi(C/i)φ(i)∑x=1min(A,B)/i∑d=1min(A,B)/ixμ(x)(A/idx)(B/idx)\prod_{i=1}^{M}i^{(C/i)\varphi(i)\sum_{x=1}^{min(A,B)/i}\sum_{d=1}^{min(A,B)/ix}\mu(x)(A/idx)(B/idx)}∏i=1M​i(C/i)φ(i)∑x=1min(A,B)/i​∑d=1min(A,B)/ix​μ(x)(A/idx)(B/idx)
考虑∑x=1min(A,B)/i∑d=1min(A,B)/ixμ(x)(A/idx)(B/idx)\sum_{x=1}^{min(A,B)/i}\sum_{d=1}^{min(A,B)/ix}\mu(x)(A/idx)(B/idx)∑x=1min(A,B)/i​∑d=1min(A,B)/ix​μ(x)(A/idx)(B/idx)
∑T=1min(A,B)/i(A/Ti)(B/Ti)∑d∣Tμ(d)\sum_{T=1}^{min(A,B)/i}(A/Ti)(B/Ti)\sum_{d|T}\mu(d)∑T=1min(A,B)/i​(A/Ti)(B/Ti)∑d∣T​μ(d)
后面那个显然只有T=1为1
所以这一部分就是∏i=1Mi(A/i)(B/i)(C/i)φ(i)\prod_{i=1}^{M}i^{(A/i)(B/i)(C/i)\varphi(i)}∏i=1M​i(A/i)(B/i)(C/i)φ(i),直接分块
∏i=1M∏x=1min(A,B)/i∏d=1min(A,B)/ixd(C/i)φ(i)μ(x)(A/idx)(B/idx)\prod_{i=1}^{M}\prod_{x=1}^{min(A,B)/i}\prod_{d=1}^{min(A,B)/ix}d^{(C/i)\varphi(i)\mu(x)(A/idx)(B/idx)}∏i=1M​∏x=1min(A,B)/i​∏d=1min(A,B)/ix​d(C/i)φ(i)μ(x)(A/idx)(B/idx)
∏i=1M∏T=1min(A,B)/i∑d∣Tdμ(T/d)(A/iT)(B/iT)(C/i)φ(i)\prod_{i=1}^{M}\prod_{T=1}^{min(A,B)/i}\sum_{d|T}d^{\mu(T/d)(A/iT)(B/iT)(C/i)\varphi(i)}∏i=1M​∏T=1min(A,B)/i​∑d∣T​dμ(T/d)(A/iT)(B/iT)(C/i)φ(i),分块套分块即可

如果写错了什么那也是无可奈何啊(摊手

Code

#include <cstdio>
#include <cstring>
#include <algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
using namespace std;typedef long long ll;const int N=1e5+5;int q,Mo,p[N],mu[N],phi[N];
bool vis[N];
ll f1[N],t1[N],f2[N],t2[N],s[N],f3[N],sp[N],Inv_t1[N],Inv_t2[N],a,b,c;ll pwr(ll x,ll y) {y%=Mo-1;if (y<0) y+=Mo-1;ll z=1;for(;y;y>>=1,x=x*x%Mo)if (y&1) z=z*x%Mo;return z;
}ll Inv(ll x) {return pwr(x,Mo-2);}ll S(ll x) {return x*(x+1)/2%(Mo-1);}void pre(int N) {mu[1]=phi[1]=1;fo(i,2,N) {if (!vis[i]) p[++p[0]]=i,mu[i]=-1,phi[i]=i-1;fo(j,1,p[0]) {int k=i*p[j];if (k>N) break;vis[k]=1;if (!(i%p[j])) {phi[k]=phi[i]*p[j];break;}mu[k]=-mu[i];phi[k]=phi[i]*(p[j]-1);}}f1[0]=f2[0]=f3[0]=1;fo(i,1,N) {f1[i]=f1[i-1]*i%Mo;f2[i]=f2[i-1]*pwr(i,i)%Mo;f3[i]=f3[i-1]*pwr(i,phi[i])%Mo;}fo(i,0,N) t1[i]=t2[i]=1;fo(d,1,N) fo(x,1,N/d) {int now=pwr(d,mu[x]);t1[d*x]=t1[d*x]*now%Mo;t2[d*x]=t2[d*x]*now%Mo;}Inv_t1[0]=Inv_t2[0]=1;fo(i,1,N) {t1[i]=t1[i-1]*t1[i]%Mo;t2[i]=t2[i-1]*pwr(t2[i],(ll)i*i)%Mo;Inv_t1[i]=Inv(t1[i]);Inv_t2[i]=Inv(t2[i]);sp[i]=(sp[i-1]+phi[i])%(Mo-1);}
}namespace Type_1{ll calc(ll n,ll m) {if (n>m) swap(n,m);ll ans=1;for(ll l=1,r=0;l<=n;l=r+1) {r=min(n/(n/l),m/(m/l));ans=ans*pwr(t1[r]*Inv_t1[l-1]%Mo,(n/l)*(m/r))%Mo;}return ans;}
}namespace Type_2{ll calc(ll n,ll m) {if (n>m) swap(n,m);ll ans=1;for(ll l=1,r=0;l<=n;l=r+1) {r=min(n/(n/l),m/(m/l));ans=ans*pwr(t2[r]*Inv_t2[l-1]%Mo,S(n/l)*S(m/l))%Mo;}return ans;}
}namespace Type_3{ll calc(ll a,ll b) {if (a>b) swap(a,b);ll ans=1;for(ll l=1,r=0;l<=a;l=r+1) {r=min(a/(a/l),b/(b/l));ans=ans*pwr(t1[r]*Inv_t1[l-1]%Mo,(a/l)*(b/l))%Mo;}return ans;}ll calc_1(ll a,ll b,ll c) {ll ans=1;int m=min(min(a,b),c);for(ll l=1,r=0;l<=m;l=r+1) {r=min(min(a/(a/l),b/(b/l)),c/(c/l));ll ret=(sp[r]-sp[l-1])%(Mo-1);ans=ans*pwr(f1[a/l],(b/l)*(c/l)%(Mo-1)*ret)%Mo;}return ans;}ll calc_2(ll a,ll b,ll c) {ll ans=1;int m=min(min(a,b),c);for(ll l=1,r=0;l<=m;l=r+1) {r=min(min(a/(a/l),b/(b/l)),c/(c/l));ans=ans*pwr(calc(a/l,b/l),(sp[r]-sp[l-1])*(c/l))%Mo;}return ans;}
}int main() {scanf("%d%d",&q,&Mo);pre(1e5);for(;q;q--) {scanf("%lld%lld%lld",&a,&b,&c);ll ans=pwr(f1[a],b*c)%Mo*pwr(f1[b],a*c)%Mo;ans=ans*Inv(pwr(Type_1::calc(a,b),c))%Mo;ans=ans*Inv(pwr(Type_1::calc(a,c),b))%Mo;printf("%lld ",ans);ans=pwr(f2[a],S(b)*S(c))*pwr(f2[b],S(a)*S(c))%Mo;ans=ans*Inv(pwr(Type_2::calc(a,b),S(c)))%Mo;ans=ans*Inv(pwr(Type_2::calc(a,c),S(b)))%Mo;printf("%lld ",ans);ans=Type_3::calc_1(a,b,c)*Type_3::calc_1(b,a,c)%Mo;ans=ans*Inv(Type_3::calc_2(a,b,c))%Mo;ans=ans*Inv(Type_3::calc_2(a,c,b))%Mo;printf("%lld\n",ans);}return 0;
}

「MtOI2019」幽灵乐团相关推荐

  1. 【luogu P5518】[MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演)

    [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题 题目链接:luogu P5518 题目大意 ∏ i = 1 A ∏ j = 1 B ∏ k = 1 C ( lcm ( i , j ) gcd ...

  2. 马斯克:我有一个大胆的想法!给红绿灯加个AI视觉「外挂」

      转载自:视学算法   编辑:好困 [导读]大半夜的,四下无人又没车,为何还要我等这么久的红灯?这两天,马斯克也在思考这个问题. 对于社畜来说,大城市的交通无非分为两种: 白天不让上班:晚上不让回家 ...

  3. 「视频」重磅 | Magic Leap再发Demo,凯文·凯利万字长文揭秘

    Magic Leap 令人迷幻的技术透露出哪些有关虚拟现实未来的信息? 编者按:本文作者 Kevin Kelly,由机器之心编译:参与者:周亮.chenxiaoqing.吴攀.Ruby.李亚洲.夏梦 ...

  4. 何为功能平价?特斯拉「抛弃」多传感融合,背后有哪些门道

    技术与成本,永远是博弈的两方. 当大部分车企都在寻求通过增加更多.更高性能的传感器(也就是通常所说的多传感融合技术)来强化智能驾驶功能可靠性和拓展性的大背景下,特斯拉依然我行我素,继续沿着纯视觉感知的 ...

  5. 泪目!上海00后小伙AI「复活」奶奶,100%还原音容笑貌,却引发巨大争议

    [导读]最近,00后小伙用AI技术和奶奶实现「对话」,数字生命要成为现实了吗? 你有没有特别想念的人?可能ta是你的亲人,也可能是你的伴侣. 无论ta是谁,在我们的回忆中永远有他们的一席之地,他们一辈 ...

  6. earth power oracle,平行世界 | 他「抛弃」绘画从事摄影,将绘画与摄影结合在一起,创造了电影般的震撼场景,邀请我们与他一起穿越黑暗世界的旅程...

    点击播放 GIF 0.0M 「 想象力常常会把我们 带到从未有过的世界. 但没有它, 我们将一事无成.」 -- 卡尔·萨根(Carl Sagan) 如果你正在阅读这篇文章,你可能已经想到了平行世界的样 ...

  7. 【C++】「JSOI-2008」魔兽地图DotR

    「JSOI-2008」魔兽地图DotR [来源] [题目描述] [输入格式] [输出格式] [样例输出] [样例输出] [解析] [代码] [来源] BZOJ-1017 计蒜客-T2793 vjudg ...

  8. 万字长文讲解:什么是「抽象」?

    编译 | bluemin 编辑丨陈彩娴 1 抽象 计算思维以设计问题的抽象模型为中心,应用计算步骤和高效算法解决问题--这一概念不仅服务于计算机科学(CS),而且逐渐渗透到科学和日常生活中. 「抽象」 ...

  9. 如何直观地理解「协方差矩阵」?

    如何直观地理解「协方差矩阵」? Xinyu Chen Urban Traffic Data Analytics 372 人赞同了该文章 协方差矩阵在统计学和机器学习中随处可见,一般而言,可视作方差和协 ...

最新文章

  1. mysql 手动写时间_关于数据库中如何存储时间的一点思考
  2. greta的问题及解决: LIBCMTD.lib(_wctype.obj) : error LNK2005: _iswspace already defined in xxx.obj...
  3. bzoj1025题解
  4. mysql 导出表数据到另一张表_yz-Mysql数据库中一个表中的数据导出来到另外一个数据库的表格...
  5. 光纤收发器产品的光电介质转换芯片选择性能指标介绍
  6. Android之使用ThumbnailUtils类来获取视频第一帧缩略图
  7. 经典算法大全之河内之塔
  8. 20200819:力扣202周周赛题解记录
  9. 如何安装无签名认证的rpm包
  10. Castle 开发系列文章
  11. bzoj 1627: [Usaco2007 Dec]穿越泥地(BFS)
  12. picasa csdn_如何阻止Picasa截取不必要的屏幕截图
  13. Directx12 曲面细分详解
  14. BOM差异对比——Spreadsheet Compare
  15. 9、(九)外汇交易技术术语表
  16. php guzzlehttp,PHP HTTP客户端-Guzzle原理解析
  17. 加拿大Introspect I3C 协议分析仪(Analyzer)及训练器(Exerciser)
  18. echarts柱状图颜色渐变样式
  19. (附源码)计算机毕业设计SSM智慧工地管理系统
  20. 快速理解数据库函数依赖(平凡函数依赖、非平凡函数依赖、完全函数依赖、部分函数依赖、传递依赖)

热门文章

  1. AutoDL论文解读(二):基于遗传算法的典型工作
  2. 麦克纳姆轮小车matlab仿真,学习使用Python控制麦克纳姆轮底盘
  3. java.lang.AbstractMethodError和(Ljava/lang/String;)Ljava/lang/String; is abstract
  4. Linux系统解压zip包出现中文乱码问题
  5. 苹果操作系统入门知识
  6. 祝贺Artefact首席数据科学家张鹏飞先生荣获 Campaign Asia Tech MVP 2022
  7. 微信小程序循环列表添加动画animation
  8. 算力坊HPC(一)——算力共享平台
  9. CF 1667B Optimal Partition
  10. Devenv 命令行开关