题目

\[\large\prod_{i_1=1}^n\prod_{i_2=1}^n\dots\prod_{i_k=1}^n\frac{i_1*i_2*\dots*i_k}{gcd(i_1,i_2,\dots,i_k)}\pmod {998244353}
\]

分析

考虑分子分母分别处理,首先看分子,设

\[\large f[k]=\prod_{i_1=1}^n\prod_{i_2=1}^n\dots\prod_{i_k=1}^n i_1*i_2*\dots*i_k
\]

那么\(f[k]=(n!)^{n^{k-1}}f[k-1]^n\),其中\(f[0]=1\)

设\(f_n[k]\)表示\(f[k]\)中\(n!\)的次数,那么

\(f_n[k]=n^{k-1}+n*f_n[k-1]\),其中\(f_n[0]=0\)

可以找规律发现\(f_n[k]=kn^{k-1}\)

那么

\[f[k]=(n!)^{kn^{k-1}}
\]

这就是分子

分母就是

\[\large\prod_{i_1=1}^n\prod_{i_2=1}^n\dots\prod_{i_k=1}^n gcd(i_1,i_2,\dots,i_k)
\]

如果硬套性质很难做,考虑枚举约数计算这个约数出现了多少次,那也就是

\[\large \prod_{d=1}^n d^{\sum_{i_1=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{i_2=1}^{\lfloor\frac{n}{d}\rfloor}\dots \sum_{i_k=1}^{\lfloor\frac{n}{d}\rfloor}[gcd(i_1,i_2,\dots i_k)==d]}
\]

根据莫比乌斯函数的性质化简得到

\[\large \prod_{d=1}^n d^{\sum_{g=1}^\frac{n}{d}\mu(g){\lfloor\frac{n}{dg}\rfloor}^k}
\]

如果直接套用整除分块会TLE,考虑预处理\({\lfloor\frac{n}{dg}\rfloor}^k\)

一定要做到\(O(1)\)查询,这个很简单,直接开个桶完成一次询问后清除标记就可以了

如果用个STL::map的话就会TLE,当然可以套用欧拉定理优化快速幂


代码

#include <cstdio>
#include <cctype>
#include <map>
#define rr register
using namespace std;
const int mod=998244353,phi=998244352,Phi=402653184,P=3001;
const int N=300000; typedef long long lll; lll k; int h[N|31];
int mu[N|31],fac[N|31],inv[N|31],prime[N|31],Cnt,v[N|31],ans,T,n;
inline signed ksm(int x,int y,int p){
rr int ans=1;
for (;y;y>>=1,x=1ll*x*x%p)
if (y&1) ans=1ll*ans*x%p;
return ans;
}
signed main(){
mu[1]=fac[0]=fac[1]=inv[0]=inv[1]=1;
for (rr int i=2;i<=N;++i){
if (!v[i]) prime[++Cnt]=i,mu[i]=-1;
for (rr int j=1;j<=Cnt&&prime[j]<=N/i;++j){
v[i*prime[j]]=1;
if (i%prime[j]==0) break;
mu[i*prime[j]]=-mu[i];
}
}
for (rr int i=2;i<=N;++i) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod,mu[i]+=mu[i-1];
for (rr int i=2;i<=N;++i) fac[i]=1ll*fac[i-1]*i%mod,inv[i]=1ll*inv[i-1]*inv[i]%mod;
for (scanf("%d",&T);T;--T){
scanf("%d%lld",&n,&k),ans=1;
rr int f=ksm(fac[n],1ll*k%phi*ksm(n,(k-1)%Phi,phi)%phi,mod);
for (rr int l=1,r,z;l<=n;l=r+1)
z=n/l,r=n/z,h[z]=ksm(z,k%Phi,phi);
for (rr int l=1,r,z,now;l<=n;l=r+1){
z=n/l,r=n/z,now=0;
for (rr int L=1,R,Z;L<=z;L=R+1)
Z=z/L,R=z/Z,now=(now+1ll*(mu[R]-mu[L-1]+phi)*h[Z]%phi)%phi;
ans=1ll*ans*ksm(1ll*fac[r]*inv[l-1]%mod,now,mod)%mod;
}
for (rr int l=1,r,z;l<=n;l=r+1)
z=n/l,r=n/z,h[z]=0;
printf("%lld\n",1ll*f*ksm(ans,mod-2,mod)%mod);
}
return 0;
}

#莫比乌斯反演,整除分块,欧拉定理#U137539 虚伪的最小公倍数的更多相关文章

  1. [P4450] 双亲数 - 莫比乌斯反演,整除分块

    模板题-- \[\sum\limits_{i=1}^a\sum\limits_{j=1}^b[(i,j)=k] = \sum\limits_{i=1}^a\sum\limits_{j=1}^b[k|i ...

  2. Bzoj1101: [POI2007]Zap 莫比乌斯反演+整除分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101 莫比乌斯反演 1101: [POI2007]Zap 设 \(f(i)\) 表示 \(( ...

  3. 莫比乌斯反演&整除分块学习笔记

    整除分块 用于计算$\sum_{i=1}^n f(\lfloor{n/i} \rfloor)*i$之类的函数 整除的话其实很多函数值是一样的,对于每一块一样的商集中处理即可 若一个商的左边界为l,则右 ...

  4. 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)

    题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...

  5. [POI2007]ZAP-Queries (莫比乌斯反演+整除分块)

    [POI2007]ZAP-Queries \(solution:\) 唉,数论实在有点烂了,昨天还会的,今天就不会了,周末刚证明的,今天全忘了,还不如早点写好题解. 这题首先我们可以列出来答案就是: ...

  6. 洛谷 - P2257 - YY的GCD - 莫比乌斯反演 - 整除分块

    https://www.luogu.org/problemnew/show/P2257 求 \(n,m\) 中 \(gcd(i,j)==p\) 的数对的个数 求 $\sum\limits_p \sum ...

  7. [国家集训队] Crash的数字表格 - 莫比乌斯反演,整除分块

    考虑到\(lcm(i,j)=\frac{ij}{gcd(i,j)}\) \(\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{gcd(i,j)}\) \(\sum_{d=1}^{n} ...

  8. 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)

    洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...

  9. P2568 莫比乌斯反演+整除分块

    #include<bits/stdc++.h> #define LL long long using namespace std; ; bool vis[maxn]; int prime[ ...

  10. 洛谷 - UVA11424 - GCD - Extreme (I) - 莫比乌斯反演 - 整除分块

    https://www.luogu.org/problemnew/show/UVA11424 原本以为是一道四倍经验题来的. 因为输入的n很多导致像之前那样 \(O(n)\) 计算变得非常荒谬. 那么 ...

随机推荐

  1. instance must be started before calling this method

    解决方法 检查zk的连接数: 端口号: 数据库连接配置: zk的连接配置: 如果都没有问题,就重启容器.

  2. 阿尔萨斯(Arthas)入门

    目录 简介 Arthas(阿尔萨斯) 能为你做什么 安装 快速安装 全量安装 卸载 使用 启动arthas 查看dashboard 通过thread命令来获取到arthas-demo进程的Main C ...

  3. Spring Boot+Thymeleaf+MyBatis--推荐一个后端练手极佳的商城项目

    项目整体架构 newbee-mall ├── src/main/java └── ltd.newbee.mall ├── common // 存放相关的常量配置及枚举类 ├── config // 存 ...

  4. 分布式事务框架seata入门

    一.简介 在近几年流行的微服务架构中,由于对服务和数据库进行了拆分,原来的一个单进程本地事务变成多个进程的本地事务,这时要保证数据的一致性,就需要用到分布式事务了.分布式事务的解决方案有很多,其中国内 ...

  5. netcat 命令介绍及使用示例

    netcat 命令介绍及使用示例 nc(netcat)是一个强大的网络工具,它可以用于读取和写入数据流,支持 TCP 和 UDP 协议.它常被用于网络调试和网络服务的创建. 一.安装方法 centos ...

  6. XAF Blazor 中使用 Blazor 组件

    前言 文章的标题是不是感觉有点奇怪,但实际我们在XAFBlazor中使用Blazor组件是很繁琐的,我们需要将Blazor组件封装成属性编辑器(PropertyEditor),再用非持久化对象(Non ...

  7. 使用PdfSharp从模板生成Pdf文件

    ​ 最近在做一个生成文档的需求.通过先制作一个包含各字段占位符的文档模板,导入这个模板并填写内容替换掉占位符,再输出成最终文件. 由于版式固定,安全性更好,业务上常用Pdf作为最终标准化的格式, 在. ...

  8. vue2init vue2z

    <template> <div> </div> </template> <script> export default { name: 'b ...

  9. guava和redis 都是缓存用的,不过redis要起服务,guava不用起服务

    guava和redis 都是缓存用的,不过redis要起服务,guava不用起服务

  10. Leetcode 1161 最大层内元素和

    一.题目 给你一个二叉树的根节点 root.设根节点位于二叉树的第1层,而根节点的子节点位于第2层,依此类推. 请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个. 示 ...