\(\text{Problem}\)

JZOJ上,求

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

对 \(10^9+7\) 取模

\(n,m,k \le 5 \times 10^6\)

LG 上,是一个加强版,有 \(T(T\le 2 \times 10^3)\) 组数据

\(\text{Analysis}\)

依照套路的方法,我们可以推出

\[Ans = \sum_{p=1} p^k \sum_{d=1} \mu(d) \lfloor \frac{n}{pd} \rfloor \lfloor \frac{m}{pd} \rfloor
\]

若只有一组数据,那么

数论分块套数论分块 \(O(n^{\frac{3}{4}})\) 即可

加上线筛 \(O(n)\)

\(\text{Code}\)

#include<cstdio>
#include<iostream>
#define LL long long
#define re register
using namespace std; const int N = 5e6, P = 1e9 + 7;
int n, m, k, totp, pr[N], vis[N + 5], sum[N + 5], pk[N + 5]; inline int fpow(LL x, LL y)
{
LL res = 1;
for(; y; y >>= 1)
{
if (y & 1) res = res * x % P;
x = x * x % P;
}
return res;
} inline void Euler()
{
vis[1] = sum[1] = pk[1] = 1;
for(re int i = 2; i <= N; i++)
{
if (!vis[i]) pr[++totp] = i, sum[i] = -1, pk[i] = fpow(i, k);
for(re int j = 1; j <= totp && i * pr[j] <= N; j++)
{
vis[i * pr[j]] = 1, pk[i * pr[j]] = (LL)pk[i] * pk[pr[j]] % P;
if (!(i % pr[j])) break;
sum[i * pr[j]] = -sum[i];
}
}
for(re int i = 1; i <= N; i++) sum[i] += sum[i - 1], pk[i] = (pk[i] + pk[i - 1]) % P;
} inline int F(int n, int m)
{
LL res = 0;
for(re int l = 1, r; l <= min(n, m); l = r + 1)
{
r = min(n / (n / l), m / (m / l));
res = (res + (LL)(sum[r] - sum[l - 1] + P) * (n / l) % P * (m / l)) % P;
}
return res;
} int main()
{
scanf("%d%d%d", &n, &m, &k);
Euler();
LL ans = 0;
for(re int l = 1, r; l <= min(n, m); l = r + 1)
{
r = min(n / (n / l), m / (m / l));
ans = (ans + (LL)(pk[r] - pk[l - 1] + P) * F(n / l, m / l) % P) % P;
}
printf("%lld\n", ans);
}

但LG上有多组数据,显然太慢了

同样套路地 \(T=pd\)

然后这个式子成了

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

\(g(d)=d^k\) 显然是个积性函数,然后 \(G=g * mu\) 也是个积性函数

于是我们考虑线筛预处理 \(G\),然后数论分快做到单次 \(O(\sqrt n)\)

根据积性函数性质有 \(G(d) = \prod_{i=1} G({p_i}^{c_i})\)

然后我们思考什么样的数有贡献

\[G(n) = \prod_{i=1} \sum_{j=0}^{c_i} \mu({p_i}^{j}) {p_i}^{(c_i-j)k}
\]

因为 \(\mu\) 的性质,我们知道,只有当 \(j=0\) 或 \(j=1\) 时有贡献,于是有

\[\begin{aligned}
G(n)
&= \prod_{i=1} \mu(1) {p_i}^{c_i k} + \mu(p_i) {p_i}^{(c_i-1)k} \\
&= \prod_{i=1} {p_i}^{c_i k} - {p_i}^{(c_i-1)k} \\
&= \prod_{i=1} {p_i}^{(c_i-1) k}({p_i}^k-1)
\end{aligned}
\]

当 \(c_i = 1\) 的时候,就是质数的时候,\(G(p)=p^k-1\)

因为 \(G\) 是积性函数,所以 \(G(ab)=G(a)G(b)(\gcd(a,b)=1)\)

若 \(a,b\) 不互质,因为在线筛时枚举质数,所以 \(b\in \mathbb P\),设 \(a = a' p^c(\gcd(a,a')=1)\)

那么 \(G(ab)=G(a')G(p^{c+1})=G(a')p^{ck}(p^k-1)\)

线筛过程中 \(p^{(c-1)k}(p^k-1)\) 已计入 \(G(ab)\) 中,所以本次再乘上 \(p^k\) 即可

综上

\[G(ab)=
\begin{cases}
G(a)G(b) & \gcd(a,b)=1 \\
G(a)b^k & \gcd(a,b)>1
\end{cases}
\]

线筛即可完美处理

\(\text{Code}\)

#include<cstdio>
#include<iostream>
#define LL long long
#define re register
using namespace std; const int N = 5e6, P = 1e9 + 7;
int n, m, k, totp, pr[N], vis[N + 5], pk[N + 5];
LL sum[N + 5]; inline int fpow(LL x, LL y)
{
LL res = 1;
for(; y; y >>= 1)
{
if (y & 1) res = res * x % P;
x = x * x % P;
}
return res;
} inline void Euler()
{
vis[1] = sum[1] = pk[1] = 1;
for(re int i = 2; i <= N; i++)
{
if (!vis[i]) pr[++totp] = i, pk[i] = fpow(i, k), sum[i] = (pk[i] - 1 + P) % P;
for(re int j = 1; j <= totp && i * pr[j] <= N; j++)
{
vis[i * pr[j]] = 1, pk[i * pr[j]] = (LL)pk[i] * pk[pr[j]] % P;
if (i % pr[j]) sum[i * pr[j]] = sum[i] * sum[pr[j]] % P;
else{sum[i * pr[j]] = sum[i] * pk[pr[j]] % P; break;}
}
}
for(re int i = 1; i <= N; i++) sum[i] = (sum[i] + sum[i - 1]) % P;
} int main()
{
int T; scanf("%d%d", &T, &k);
Euler();
for(; T; T--)
{
scanf("%d%d", &n, &m);
LL ans = 0;
for(re int l = 1, r; l <= min(n, m); l = r + 1)
{
r = min(n / (n / l), m / (m / l));
ans = (ans + (sum[r] - sum[l - 1] + P) * (n / l) % P * (m / l)) % P;
}
printf("%lld\n", ans);
}
}

LG P4449 & JZOJ 于神之怒的更多相关文章

  1. Solution -「洛谷 P4449」于神之怒加强版

    \(\mathcal{Description}\)   Link.   给定 \(k\) 和 \(T\) 组 \(n,m\),对于每组,求 \[\sum_{i=1}^n\sum_{j=1}^m\ope ...

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

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

  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 于神之怒加强版

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

  5. 并不对劲的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 ...

  6. 题解 P4449 于神之怒加强版

    这道题算是我完完整整推的第一道题,写篇题解纪念一下. 题目 废话不多说,直接开始推式子(给新手准备,过程较详细,大佬可自行跳步),以下过程中均假设 \((n\le m)\),\([d=1]\) 类似于 ...

  7. [jzoj 6087] [GDOI2019模拟2019.3.26] 获取名额 解题报告 (泰勒展开+RMQ+精度)

    题目链接: https://jzoj.net/senior/#main/show/6087 题目: 题解: 只需要统计$\prod_{i=l}^r (1-\frac{a_i}{x})$ =$exp(\ ...

  8. Linux下安装性能测试负载机LG

    系统:CentOS release 6.6 (Final)  x86_64 安装包: 1.LRLG_00031.iso [Load Generator Standalone (Linux 64-bit ...

  9. bootstrap 之 xs,sm,md,lg && 主要颜色

    mobile – xs ( <768px ) tablet – sm ( 768~991px ) desktop – md ( 992~1170px ) large desktop – lg ( ...

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

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

随机推荐

  1. Spring MVC文件请求处理详解:MultipartResolver

    org.springframework.web.multipart.MultipartResolver是Spring-Web针对RFC1867实现的多文件上传解决策略. 1 使用场景 前端上传文件时, ...

  2. 使用 Rainbond 搭建本地开发环境

    在开发之前,你需要在本地安装各种开发工具和服务,比如:Mysql.Redis.Nacos 等等,我们都知道在个人电脑上安装这些服务相当的繁琐,可能会遇到很多问题,环境问题.依赖问题等等. 在需要团队协 ...

  3. .net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst

    前言:本系列是我自己学习.net相关知识,以便跟上.net跨平台的步伐,目前工作原因基本在.net Framework4.7以下,所以才有了这一系列的学习总结,但是并不是从基本的C#语法和基础知识开始 ...

  4. 使用VMware安装Linux(CentOS)操作系统

    使用VMware安装CentOS 6.4 环境:Windows7 , VMware Workstation10, CentOS6.4 为什么选择CentOS ? 主流: 目前的Linux操作系统主要应 ...

  5. 【Java EE】Day07 HTML

    一.WEB概念 1.软件架构 C/S:安卓.QQ.迅雷,开发两端 B/S 2.资源分类 静态资源:浏览器内置解析引擎 HTML:展示内容 CSS:页面布局 JavaScript:控制页面元素,产生动态 ...

  6. 【每日一题】【DFS】【BFS】【队列】2021年12月5日-199. 二叉树的右视图

    解答: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...

  7. 《MySQL必知必会》之快速入门存储过程

    使用存储过程 本章介绍什么是存储过程,为什么使用.如何使用,并介绍如何创建和使用存储过程的基本语法 存储过程 在实际应用中,往往需要执行多个表的多条sql语句 存储过程就是为以后的使用而保存的一条或者 ...

  8. troubleshoot:PVC动态扩容报错

    目录 一.问题描述 二.解决方法 一.问题描述 动态扩容PVC的时候报错(kubectl edit pvc pvcname):"error: persistentvolumeclaims & ...

  9. 《HTTP权威指南》– 16.重定向与负载均衡

    重定向 重定向 的目标是尽快地将HTTP报文发送到可用的Web服务器上去.在穿过因特网的路径上,HTTP报文传输的方向会受到HTTP应用程序和报文经由的路由设备的影响: 配置创建客户端报文的浏览器应用 ...

  10. vulnhub靶场之DARKHOLE: 1

    准备: 攻击机:虚拟机kali.本机win10. 靶机:DarkHole: 1,下载地址:https://download.vulnhub.com/darkhole/DarkHole.zip,下载后直 ...