这道题算是我完完整整推的第一道题,写篇题解纪念一下。

题目

废话不多说,直接开始推式子(给新手准备,过程较详细,大佬可自行跳步),以下过程中均假设 \((n\le m)\),\([d=1]\) 类似于代码中的 (d==1)

\[\sum_{i=1}^{n}\sum_{j=1}^mgcd(i,j)^k
\]

直接按套路提取

\[\sum_{d=1}^{n}d^k\sum_{i=1}^{n}\sum_{j=1}^m[gcd(i,j)=d]
\]

等价于

\[\sum_{d=1}^{n}d^k\sum_{i=1}^{n}\sum_{j=1}^m[gcd(\frac{i}{d},\frac{j}{d})=1]
\]

我们改变一下枚举项,枚举 \(\frac{i}{d},\frac{j}{d}\)

\[\sum_{d=1}^{n}d^k\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}[gcd(i,j)=1]
\]

接下来就要用到莫比乌斯函数的性质

\[\sum_{d=1}^{n}d^k\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}\sum_{x|i}\sum_{x|j}\mu(x)
\]

我们改成枚举 \(\frac{i}{x},\frac{j}{x}\)

\[\sum_{d=1}^{n}d^k\sum_{x=1}^{\lfloor\frac{n}{d}\rfloor}\lfloor\frac{n}{dx}\rfloor\lfloor\frac{m}{dx}\rfloor\mu(x)
\]

这个 \(dx\) 让人很不爽,我们把它换个元,令 \(T=dx\)

\[\sum_{T=1}^n\sum_{d|T}d^k\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\mu(\frac{T}{d})
\]

把无关项往前提一提

\[\sum_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum_{d|T}d^k\mu(\frac{T}{d})
\]

整理好后我们会发现这个式子太友善了,后面一部分

\[\sum_{d|T}d^k\mu(\frac{T}{d})
\]

完全就是 \(id_k*\mu\) ( \(*\) 为 \(Dirichlet\) 卷积),所以我们可以知道 \(f(T)=id_k*\mu\) 是一个积性函数。

所以我们只需要研究 \(T|p^x\kern 0.4emx\in N_+ \kern 0.4emp\in prime\)

而由于 \(\mu\) 的性质,(当 \(x=1\) 时)

\[d^k\mu(\frac{T}{d})=\left\{
\begin{aligned}
-1\kern 1.0em(d=1)\\
T^k\kern 1.0em(d=T)\\
\end{aligned}
\right.
\]

所以 \(f(T)=T^k-1\)

当 \(x>1\) 时,有

\[d^k\mu(\frac{T^x}{d})=\left\{
\begin{array}{lcl}
-(T^{x-1})^k\kern 1.0em(d=T^{x-1})\\
(T^x)^k\kern 2.7em(d=T^x)\\
\end{array}
\right.
\]

所以我们线性筛时

\[f_{i×prime_j}=\left\{
\begin{array}{lcl}
f_i×f_{prime_j}\kern 1.0em gcd(prime_j,i)=1\\
f_i×prime_j^k\kern 1.0em (prime_j|i)
\end{array}
\right.
\]

这样我们就可以愉快的线性筛了,而由于那个快被我们遗忘的前半部分用数论分块,所以总体复杂度为 \(O(n+(\text{素数个数})×logk+T×\sqrt{n})\)

\(AC\kern 0.4em CODE:\)

#include<bits/stdc++.h>
#define ri register int
#define p(i) ++i
using namespace std;
const int MOD=1e9+7,N=5e6+7;
inline int read() {
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
}
int prime[N],vis[N],f[N],cm[N],k;
inline int fpow(int x,int y) {
int res=1;
while(y) {
if (y&1) res=1ll*res*x%MOD;
x=1ll*x*x%MOD;y>>=1;
}
return res;
}
void getmju(int n) {
int tot=0;f[1]=1;
for (ri i(2);i<=n;p(i)) {
if (!vis[i]) prime[p(tot)]=i,cm[tot]=fpow(i,k),f[i]=1ll*(cm[tot]-1+MOD)%MOD;
for (ri j(1);j<=tot&&prime[j]*i<=n;p(j)) {
vis[prime[j]*i]=1;
if (!(i%prime[j])) {
f[i*prime[j]]=1ll*cm[j]*f[i]%MOD;
break;
}
f[i*prime[j]]=1ll*f[i]*f[prime[j]]%MOD;
}
}
for (ri i(2);i<=n;p(i)) f[i]=(f[i]+f[i-1])%MOD;
}
int n[2020],m[2020],mxn;
int main() {
//freopen("rr.out","w",stdout);
int T=read();k=read();
for (ri i(1);i<=T;p(i)) n[i]=read(),m[i]=read(),mxn=max(mxn,min(n[i],m[i]));//小小的优化一下
getmju(mxn);
for (ri i(1);i<=T;p(i)) {
int nn=n[i],mm=m[i];
if (nn>mm) swap(nn,mm);
int ans=0;
for (ri l(1),r;l<=nn;l=r+1) {
r=min(nn/(nn/l),mm/(mm/l));
ans=(ans+1ll*((f[r]-f[l-1]+MOD)%MOD)*(nn/l)%MOD*(mm/l)%MOD)%MOD;
}
printf("%d\n",ans);
}
return 0;
}

题解 P4449 于神之怒加强版的更多相关文章

  1. P4449 于神之怒加强版 (莫比乌斯反演)

    [题目链接] https://www.luogu.org/problemnew/show/P4449 给定n,m,k,计算 \(\sum_{i=1}^n \sum_{j=1}^m \mathrm{gc ...

  2. P4449 于神之怒加强版

    \(\color{#0066ff}{ 题目描述 }\) 给定n,m,k,计算 \(\sum_{i=1}^n \sum_{j=1}^m \mathrm{gcd}(i,j)^k\) 对1000000007 ...

  3. 洛谷 - P4449 - 于神之怒加强版 - 莫比乌斯反演

    https://www.luogu.org/problemnew/show/P4449 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{m} gcd(i, ...

  4. 并不对劲的p4449于神之怒加强版

    题目大意 给定\(t,k(t\leq2000,k\leq5*10^6)\) \(t\)组询问,每组给出\(n,m(n,m\leq5*10^6)\)求$\sum_{i=1}^n \sum_{j=1}^m ...

  5. 【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛

    4407: 于神之怒加强版 Time Limit: 80 Sec  Memory Limit: 512 MBSubmit: 241  Solved: 119[Submit][Status][Discu ...

  6. 【BZOJ4407】于神之怒加强版(莫比乌斯反演)

    [BZOJ4407]于神之怒加强版(莫比乌斯反演) 题面 BZOJ 求: \[\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)^k\] 题解 根据惯用套路 把公约数提出来 \[\sum ...

  7. BZOJ 4407 于神之怒加强版 (莫比乌斯反演 + 分块)

    4407: 于神之怒加强版 Time Limit: 80 Sec  Memory Limit: 512 MBSubmit: 1067  Solved: 494[Submit][Status][Disc ...

  8. bzoj 4407 于神之怒加强版 (反演+线性筛)

    于神之怒加强版 Time Limit: 80 Sec  Memory Limit: 512 MBSubmit: 1184  Solved: 535[Submit][Status][Discuss] D ...

  9. 【BZOJ4407】于神之怒加强版 莫比乌斯反演

    [BZOJ4407]于神之怒加强版 Description 给下N,M,K.求 Input 输入有多组数据,输入数据的第一行两个正整数T,K,代表有T组数据,K的意义如上所示,下面第二行到第T+1行, ...

随机推荐

  1. Android Binder 进程间通讯机制梳理

    什么是 Binder ? Binder是Android系统中进程间通讯(IPC)的一种方式,也是Android系统中最重要的特性之一.Binder的设计采用了面向对象的思想,在Binder通信模型的四 ...

  2. Leetcode No.119 Pascal's Triangle II(c++实现)

    1. 题目 1.1 英文题目 Given an integer rowIndex, return the rowIndexth (0-indexed) row of the Pascal's tria ...

  3. Adaptive AUTOSAR 学习笔记 1 - Overview

    缩写 AP: AUTOSAR Adaptive Platform CP: AUTOSAR Classic Platform AA: Adaptive Application ARA: AUTOSAR ...

  4. Lua表达式

    目录 算术运算符 关系运算符 逻辑运算符 字符串连接(more) string.format转义符的使用 优先级 算术运算符 Lua 的算术运算符如下表所示: 示例代码:$expr1.lua prin ...

  5. QT单进程下载

    QT    同步下载 #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNet ...

  6. 开源的负载测试/压力测试工具 NBomber

    负载测试和压力测试对于确保 web 应用的性能和可缩放性非常重要. 尽管它们的某些测试是相同的,但目标不同. 负载测试:测试应用是否可以在特定情况下处理指定的用户负载,同时仍满足响应目标. 应用在正常 ...

  7. 案例分享:Qt+Arm基于RV1126平台的内窥镜软硬整套解决方案(实时影像、冻结、拍照、录像、背光调整、硬件光源调整,其他产品也可使用该平台,如视频监控,物联网产品等等)

    自研产品系列方案   1. 基于瑞芯微的 RV1126 芯片平台:  2. 外接 USB 摄像头(OV9734. OV6946.OV2740 等 UVC 模块)作为图像输入源:  3. 可通过 LED ...

  8. js树形数据结构的扁平化

    前面我们封装了一维数组(具备树形结构相关属性)处理成树形结构的方法:https://www.cnblogs.com/coder--wang/p/15013664.html 接下来我们来一波反向操作,封 ...

  9. HDFS学习总结之安装

    HDFS linux安装总结(基于hadoop-2.6.0-cdh5.7.0 伪分部安装) 1.jdk安装 1) 直接下载jdk包放到安装目录即可(jdk-8u131-linux-x64.tar.gz ...

  10. js检测客户端是否安装

    前言 需求背景:一个web下载页面,需要检测pc是否安装了客户端软件(windows软件).网页上有一个打开客户端按钮.若安装了客户端软件,则直接打开,否则下载软件.支持web下载页面在iframe下 ...