B. Crimson Triples(Codeforces 2238) B. Crimson Triples - 题解题意简述给定n要统计有多少个有序三元组(a, b, c)满足1 a, b, c n并且gcd(lcm(a, b), lcm(b, c)) gcd(a, c)注意三元组是有序的(1, 2, 3)和(3, 2, 1)算不同。核心结论一个三元组(a, b, c)满足条件当且仅当b | a 且 b | c也就是b同时整除a和c。接下来解释为什么。从质因数指数理解任意正整数都可以拆成质因数。我们只看某一个质因子p。设p在a, b, c中出现的次数分别为x v_p(a) y v_p(b) z v_p(c)例如a 12 2^2 * 3^1 v_2(12) 2 v_3(12) 1对于质因数指数有两个基本规则v_p(gcd(u, v)) min(v_p(u), v_p(v)) v_p(lcm(u, v)) max(v_p(u), v_p(v))所以原式左边在质因子p上的指数是v_p(gcd(lcm(a, b), lcm(b, c))) min(max(x, y), max(y, z))右边在质因子p上的指数是v_p(gcd(a, c)) min(x, z)因此要求min(max(x, y), max(y, z)) min(x, z)化简这个条件观察左边max(x, y) y max(y, z) y所以min(max(x, y), max(y, z)) y如果y min(x, z)那么左边至少是y会严格大于右边条件不成立。如果y min(x, z)说明y x 且 y z于是max(x, y) x max(y, z) z左边变成min(x, z)正好等于右边。所以对于每一个质因子都必须且只需满足y x 且 y z翻译回整数就是b | a 且 b | c计数方法固定中间的数b。由于必须满足b | a b | c所以a和c都必须是b的倍数。在1..n中b的倍数有floor(n / b)个b, 2b, 3b, ..., floor(n / b) * ba可以任选一个倍数c也可以任选一个倍数所以固定b时贡献为floor(n / b) * floor(n / b)把所有b 1..n的贡献加起来answer sum_{b1}^{n} floor(n / b)^2图表示意以n 6为例固定的b1..6中b的倍数可选数量mfloor(n/b)贡献m^211, 2, 3, 4, 5, 663622, 4, 63933, 624441155116611总答案36 9 4 1 1 1 52也可以这样理解固定 b a 的选择b, 2b, 3b, ... c 的选择b, 2b, 3b, ... 每一个 a 都可以和每一个 c 配对所以是一个 m * m 的方阵。算法流程对每个测试用例读入n初始化ans 0枚举b从1到n令m n / b累加ans m * m输出ans。易错点三元组是有序的a和c不能合并计数。不是统计gcd(a, c)的值而是统计所有满足条件的(a, b, c)。答案可能很大必须使用long long。例如n 200000时光是b 1的贡献就是200000^2 40000000000。题目保证所有测试用例的n之和不超过2 * 10^5所以每个测试用例直接O(n)枚举是足够的。复杂度分析设所有测试用例的n之和为S。时间复杂度O(S) 空间复杂度O(1)其中题目保证S 2 * 10^5。C 代码实现#includebits/stdc.husingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intT;cinT;while(T--){longlongn;cinn;longlongans0;// 固定中间的 b。// 条件等价于 b | a 且 b | c。// 在 1..n 中b 的倍数有 floor(n / b) 个。for(longlongb1;bn;b){longlongmultiplesn/b;ansmultiples*multiples;}coutans\n;}return0;}

相关新闻

最新新闻

蓝桥杯国赛A组解题策略:动态规划、贪心算法与竞赛技巧详解

蓝桥杯国赛A组解题策略:动态规划、贪心算法与竞赛技巧详解

1. 赛题复盘与整体策略回顾第十二届蓝桥杯国赛A组的题目,给我的感觉是“稳中求变,计算为王”。和往年相比,纯模板题少了,对数学思维和细节实现的要求更高了。很多题目看起来思路直接,但实现起来稍有不慎就会在时间复杂…

2026/8/28 13:00:04
Hermes Agent 完整指南:拆解工具调用循环,5 分钟看懂它怎么跑起来

Hermes Agent 完整指南:拆解工具调用循环,5 分钟看懂它怎么跑起来

Hermes Agent 完整指南:拆解工具调用循环,5 分钟看懂它怎么跑起来 【免费下载链接】hermes-agent The agent that grows with you 项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent Hermes Agent 是一个可以接入 OpenAI、Anthropi…

2026/8/28 13:00:04
虚拟化开发校招笔试核心考点解析:KVM、QEMU与云底层

虚拟化开发校招笔试核心考点解析:KVM、QEMU与云底层

很多同学看到“美丽联合2018校招基础平台-虚拟化开发工程师笔试试卷”这个标题,第一反应可能是“2018年的卷子,早过期了,有什么好看的”。我反而觉得,虚拟化方向的校招笔试,考点比绝大多数业务岗要稳定得多。虚拟化开发…

2026/8/28 13:00:04
基于 OpenTelemetry 构建 Claude Code per-user 成本仪表盘

基于 OpenTelemetry 构建 Claude Code per-user 成本仪表盘

最近在给团队推广 Claude Code 时,遇到一个很实际的问题:AI 编程助手确实能提效,但月底成本账单一出来,老板问“这个月模型调用花了多少、每个同学分别用了多少、哪些项目消耗最高”,我只能给出一个模糊的总数&#xf…

2026/8/28 13:00:04
SC7A20加速度传感器驱动开发全解析:从数据手册到实战调试

SC7A20加速度传感器驱动开发全解析:从数据手册到实战调试

简介:MEMS加速度传感器作为嵌入式系统中感知运动与姿态的核心器件,其工作原理基于微机电系统,通过检测质量块位移引起的电容变化来测量加速度。在物联网和智能硬件领域,传感器驱动开发是实现设备智能化的关键技术环节,…

2026/8/28 13:00:04
MATLAB GUI实现图论路径规划:Floyd算法与SVM在俄尔普斯问题中的应用

MATLAB GUI实现图论路径规划:Floyd算法与SVM在俄尔普斯问题中的应用

1. 项目概述与核心价值 “基于MATLAB的俄尔普斯问题解决方案APP”,这个项目标题乍一看可能有点让人摸不着头脑,但如果你对路径规划、图论或者MATLAB的GUI开发感兴趣,那它绝对是一个宝藏。简单来说,这是一个用MATLAB的图形用户界面…

2026/8/28 12:55:04