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

P2257 学习笔记

设无限集 \(\mathbb P\) 表示全体质数,则问题即求

\[\sum_{p \in \mathbb P}\sum_{x=1}^n \sum_{y=1}^m [\gcd(x,y)=p] \]

发现有一个叫 \([\gcd(x,y)=p]\) 的东西,那不就是莫比乌斯反演吗???不会的话建议重修 P3327。

\(x'=\lfloor x/p \rfloor,\lfloor y'=y/p \rfloor\),则原式等于

\[\sum_{p \in \mathbb P} \sum_{x'=1}^{\lfloor n/p \rfloor} \sum_{y'=1}^{\lfloor m/p \rfloor} [\gcd(x',y')=1] \]

又是 \([k=1]\) 的形式,直接替换为莫比乌斯函数,即

\[\sum_{p \in \mathbb P} \sum_{x'=1}^{\lfloor x/p \rfloor} \sum_{y'=1}^{\lfloor m/p \rfloor} \sum_{d \mid \gcd(x',y')} \mu(d) \]

交换求和顺序,先枚举 \(d\),则有

\[\sum_{p \in \mathbb P} \sum_{d=1}^{\min(\lfloor x/p \rfloor,\lfloor y/p \rfloor)} \mu(d) \cdot \lfloor \frac n{pd} \rfloor \cdot \lfloor \frac m{pd} \rfloor \]

我们发现有 \(pd\) 这个部分出现在了两个向下取整里,我们考虑交换求和顺序,先枚举 \(pd\),即

\[\sum_{t=1}^{\min(n,m)} \lfloor \frac nt \rfloor \lfloor \frac mt \rfloor \sum_{p \mid t,p \in \mathbb P} \mu(t/p) \]

\[f(t)=\sum_{p \mid t,p \in \mathbb P} \mu(t/p) \]

答案可化为

\[\sum_{t=1}^{\min(n,m)} \lfloor \frac nt \rfloor \lfloor \frac mt \rfloor f(t) \]

预处理 \(f(t)\) 的前缀和,剩下两个向下取整进行整除分块即可。

code
#include <bits/stdc++.h>
#define fast std::ios::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL);
constexpr std::int32_t mod = 998244353;
constexpr std::int32_t maxn = 1e7 + 5;
std::int32_t n, m, tot;
std::int64_t ans;
std::int32_t prime[maxn], mu[maxn];
std::int64_t f[maxn], pre_fsum[maxn];
bool vis[maxn];
int main() {std::freopen("contest.in", "r", stdin);std::freopen("contest.out", "w", stdout);fast;mu[1] = 1;for (std::int32_t i = 2; i <= maxn - 5; i++){if (!vis[i]) prime[++tot] = i, mu[i] = -1, f[i] = 1;for (std::int32_t j = 1; j <= tot && i * prime[j] <= maxn - 5; j++){vis[i * prime[j]] = true;if (i % prime[j] == 0){mu[i * prime[j]] = 0, f[i * prime[j]] = mu[i];break;} else mu[i * prime[j]] = -mu[i], f[i * prime[j]] = mu[i] - f[i];}}for (std::int32_t i = 1; i <= maxn - 5; i++) pre_fsum[i] = pre_fsum[i - 1] + f[i];std::int32_t t; std::cin >> t;while (t--){std::cin >> n >> m;if (n > m) std::swap(n, m); ans = 0;for (std::int32_t pl = 1, pr; pl <= n; pl = pr + 1){pr = std::min(n / (n / pl), m / (m / pl));ans += (std::int64_t)(n / pl) * (m / pl) * (pre_fsum[pr] - pre_fsum[pl - 1]);}std::cout << ans << std::endl;}return 0;
}
http://www.jsqmd.com/news/659812/

相关文章:

  • 从产品质量到用户评分:聊聊高斯分布在A/B测试、推荐系统等业务场景中的实战应用与误区
  • JVM内存模型与垃圾回收全解析
  • 福州市凤玖建筑工程有限公司:晋安区工装附近公司 - LYL仔仔
  • 智能代码生成安全风险评估:2024年Q2最新NIST SP 800-218适配指南,含3类模型权重级风险分级矩阵(L1-L3)
  • 番茄小说下载器终极指南:3种方法实现离线阅读与格式转换
  • 2026年给排水行业公司排名:江苏华厦给排水是否有自主知识产权,好用吗 - 工业设备
  • 5步掌握Windows任务栏透明化:用TranslucentTB轻松实现个性化桌面
  • Windows Cleaner:三步彻底解决C盘爆红问题,让电脑重获新生!
  • Anthropic发现:人工智能会成为隐藏自己真实意图的“卧底”吗?
  • 2026终极指南:3种方法轻松重置JetBrains IDE试用期
  • 成都市蜀宏吊装工程有限责任公司:成都市设备吊装搬运服务 - LYL仔仔
  • 梳理有实力的工业除尘滤筒大型厂家,选购攻略分享 - 工业品牌热点
  • 谷歌 Chrome 浏览器大升级:全新搜索体验,三项新功能让信息研究更便捷!
  • 上交大、中科大联合研究:AI监督微调真的“只会死记硬背“吗?
  • JetBrains IDE试用期重置:技术原理与专业实践指南
  • iOS逆向初体验:不用越狱,用MonkeyDev+Logos给App“加功能”
  • 从555振荡器到74LS192:手把手构建一个带整点报时的数字电子时钟
  • 东北大学与麻省理工学院联手破解AI“黑箱“
  • Scroll Reverser深度解析:重新定义你的macOS滚动体验
  • 揭秘兴达净化实力,其除尘滤芯反馈好吗及价格多少钱 - 工业推荐榜
  • Claude 4编码能力实战指南:OPC开发者的工具链升级方案
  • UC3846 推挽升压电路
  • 罗技鼠标宏实战指南:PUBG压枪脚本配置与优化策略
  • 2026年有实力的净化除尘滤筒厂家分析,兴达净化口碑排名及售后揭秘 - myqiye
  • Spring AI ETL进阶:定制中文元数据增强与Milvus向量化存储实战
  • WarcraftHelper终极指南:如何在Windows 11上完美运行魔兽争霸3的5个简单步骤
  • OpenCV图像处理——图像缩放函数 resize
  • 【AI简历生成器实战指南】:SITS2026官方认证的5大黄金模板+3步定制法,HR秒回率提升217%?
  • 2026年具身机器人数据匮乏,智元旗下觅蜂推平台,欲让数据如水电即取即用
  • 从数据到地图:Arcgis等值线图实战避坑指南