当前位置: 首页 > news >正文

2026“钉耙编程”中国大学生算法设计春季联赛(8)1006思路分享(莫比乌斯反演)

题意概述

给定长分别为 \(n,m\) 的数组 \(a,b\),求:

\[\sum_{i=1}^{n}{\sum_{j=1}^{m}{\frac{lcm(a_i,b_j)}{gcd{(a_i,b_j)}}}} \]

\(10^9+7\)

思路

记值域为 \(V\)\(cnt1[x]\)\(a\)\(x\) 出现次数,\(cnt2[y]\)\(b\)\(y\) 出现的次数。

原式为:

\[\sum_{x=1}^{V}{\sum_{y=1}^{V}{cnt1[x] \cdot cnt2[y] \cdot \frac{lcm(x,y)}{gcd(x,y)}}} \]

\(lcm\) 化掉,得:

\[\sum_{x=1}^{V}{\sum_{y=1}^{V}{cnt1[x] \cdot cnt2[y] \cdot \frac{x}{gcd(x,y)} \cdot \frac{y}{gcd(x,y)}}} \]

枚举 \(d=gcd(x,y)\),得:

\[\sum_{d}{\sum_{x}^{V/d}{\sum_{y}^{V/d}{cnt1[xd] \cdot cnt2[yd] \cdot x y [gcd(x,y)=1]}}} \]

根据莫比乌斯函数的性质,把 \(gcd(x,y)\) 化掉,得:

\[\sum_{d}{\sum_{x}^{V/d}{\sum_{y}^{V/d}{cnt1[xd] \cdot cnt2[yd] \cdot x y \cdot \sum_{k\mid gcd(x,y)}{\mu(k)}}}} \]

交换求和,换元化简,得:

\[\sum_{d}{\sum_{k}{\mu(k)\cdot k^2 \left(\sum_{x}^{V/d/k}{cnt1[kdx]\cdot x}\right) \left(\sum_{y}^{V/d/k}{cnt2[kdy]\cdot y}\right) }} \]

\(T=xd\),得:

\[\sum_{T}^{V}{\left( \sum_{k\mid T}{\mu(k)\cdot k^2}\right) \left(\sum_{x}^{V/T}{cnt1[Tx]\cdot x}\right) \left(\sum_{y}^{V/T}{cnt2[Ty]\cdot y}\right)} \]

令从左到右括号内式子分别为 \(f(x),g(x),h(x)\)

原式就变成:

\[\sum_{T}^{V}{f(T)\cdot g(T) \cdot h(T)} \]

\(g(x)\)\(h(x)\) 可以在调和级数时间内暴力求出。

对于 \(f(x)\),注意到 \(\mu(k)\cdot k^2\) 是积性函数,同时 \(f(x)\) 是狄利克雷卷积的形式,所以 \(f(x)\) 是积性函数,可以用欧拉筛在线性时间内求出。

时间复杂度 \(\mathcal{O}(T\cdot V\log V)\)

代码

//author:kzssCCC#include <bits/stdc++.h>
using namespace std;
using ll = long long;const int V = 1e6;
const int MOD = 1e9+7;ll A[V+1],B[V+1],C[V+1];void init(){vector<bool> f(V+1,true);f[0] = f[1] = false;vector<int> prime;A[1] = 1;for (int i=2;i<=V;i++){if (f[i]){A[i] = (1-(ll)i*i%MOD+MOD)%MOD;prime.push_back(i);}for (auto& v:prime){if ((ll)v*i>V) break;f[v*i] = false;if (i%v==0){A[v*i] = A[i];break;}A[v*i] = A[v]*A[i]%MOD;}}
}void solve(){int n,m;cin >> n >> m;vector<int> a(n+1),cnt1(V+1);for (int i=1;i<=n;i++){cin >> a[i];cnt1[a[i]]++;}vector<int> b(m+1),cnt2(V+1);for (int i=1;i<=m;i++){cin >> b[i];cnt2[b[i]]++;}for (int t=1;t<=V;t++){B[t] = 0;for (int x=1;x<=V/t;x++){B[t] = (B[t]+x*cnt1[x*t]%MOD)%MOD;}C[t] = 0;for (int y=1;y<=V/t;y++){C[t] = (C[t]+y*cnt2[y*t]%MOD)%MOD;}}ll res = 0;for (int t=1;t<=V;t++){res = (res+A[t]*B[t]%MOD*C[t]%MOD)%MOD;}cout << res << '\n';
}int main(){ios::sync_with_stdio(false);cin.tie(0);init();int t;cin >> t;while (t--) solve();return 0;
}
http://www.jsqmd.com/news/835603/

相关文章:

  • 欧米茄官方维修保养服务体系全面升级公告(2026年5月) - 速递信息
  • Tlias教学管理系统项目实战
  • 2026 年天津离婚律所权威测评,聚焦房产分割-4 大维度综合评比 - 速递信息
  • 2026年电锅炉厂家/电节能导热油炉厂家/电加热设备厂家排行 - 速递信息
  • 20026年5月永城黄金回收多少钱一克实时行情回收避坑指南 - 速递信息
  • 重庆:报考中质协六西格玛黑带和绿带指定报考机构推荐 - 众智商学院课程中心
  • 利用Cursor编写工业WebScad-005创建历史查询界面
  • MCP (Model Context Protocol) 完全指南
  • 口碑好的海报灯箱源头厂家 - 速递信息
  • 全场景赋能职场提效,WorkBuddy解锁企业数字化办公新范式 - 速递信息
  • 呼和浩特:报考中质协六西格玛黑带和绿带指定报考机构推荐 - 众智商学院课程中心
  • 内蒙古黄金回收哪家靠谱?呼市5家优质门店精选推荐 - 速递信息
  • 航空器配载与货运管理系统三次迭代作业学习总结博客
  • 厦门:报考中质协六西格玛黑带和绿带指定报考机构推荐 - 众智商学院课程中心
  • AI Agent 的生产力悖论
  • 2026淄博烧烤深度测评:牧羊村、三昧真火、小滋博,到底哪家值得吃? - 速递信息
  • Java 流程编排新范式 Solon Flow:一个引擎,七种节点,覆盖规则/任务/工作流/AI 编排全场景
  • vue2指令深入学习
  • 2026 江苏南京局部改造旧房装修翻新涂料刷新服务公司 TOP5 权威推荐 + 避坑指南 - 速递信息
  • 大一Java第六周学习总结:封装与继承
  • 博客搭建——CSS外观美化
  • 陷车清零效率提升58%:非标履带底盘案例解析 - 速递信息
  • 宁远装修避坑指南!选对装修公司少花冤枉钱,大秦装饰用实力说话 - 速递信息
  • 航空器配载与货运管理系统三次作业集总结
  • 2026年新疆旅行社行业横向测评白皮书:品质服务与用户体验深度解析 - 速递信息
  • 2026年至今湖北搏击行业现状调查:真实场馆挑选标准与避坑指南 - 速递信息
  • 500以内送礼高跟鞋排行:玫瑰米兰达领衔实用之选 - 奔跑123
  • 合肥黄金回收哪家靠谱?实测3家热门商家,第一名出乎意料 - 速递信息
  • 2026 南京旧房局部改造装修/涂料刷新服务商 TOP5 精选推荐(附避坑攻略) - 速递信息
  • 全城热议!2026 郑州整装口碑榜出炉!几何整装稳居业主首选 - 速递信息