CF1900D. Small GCD

news/2025/3/14 12:27:31/文章来源:https://www.cnblogs.com/Steven1013/p/18771856

Small GCD

比较新, 没见过.

题意

\(\displaystyle \sum_{i = 1}^n \sum_{j = i+1}^n \sum_{k =j +1}^n f(a_i, a_j, a_k)\), \(f(a_i, a_j, a_k)\) 表示的是较小两个数的 \(\gcd\).

其中​ \(n \le 8 \times 10^4, a_i \le 10^5\).

思路

直接对原式子求和是 \(\mathcal{O}(n^3 \log V)\) 的, 考虑将 \(a\) 数组排序, 我们枚举 \(f(a_i, a_j, a_k)\) 中第二大的数 \((\)也就是 \(a_j)\), 答案就成了 \(\displaystyle \sum_{j = 1}^n (n - j) \sum_{i = 1}^{j - 1} \gcd(a_i, a_j)\) 其中乘的 \((n - j)\) 是因为 \(a_k\) 可以在 \([j + 1, n]\) 中任取.

瓶颈在于快速计算 \(\displaystyle \sum_{i = 1}^{j - 1} \gcd(a_i, a_j)\).

我们令 \(f_k\) 表示在 \(1 \sim j - 1\) 中是 \(k\) 的倍数的有多少个, \(g_k\) 表示在 \(1 \sim j - 1\) 中满足 \(\gcd(a_i, a_j) = k\) 的数有多少个. \(f_k\) 可以直接枚举算出, \(g_k\) 考虑使用容斥减去它和它倍数重复的部分即可.

void init() {for (int i = 1; i <= mx; ++i) v[i].clear(), f[i] = g[i] = 0;mx = 0;scanf("%lld", &n);for (int i = 1; i <= n; ++i) scanf("%lld", a + i), mx = max(mx, a[i]);sort(a + 1, a + n + 1);for (int i = mx; i; --i)for (int j = i; j <= mx; j += i) v[j].push_back(i);
}void calculate() {int ans = 0;for (int i = 1; i <= n; ++i) {for (int j : v[a[i]]) g[j] = f[j]++;for (int j : v[a[i]]) for (int k : v[j]) if (k ^ j) g[k] -= g[j];for (int j : v[a[i]]) ans += (n - i) * g[j] * j;}printf("%lld\n", ans);
}

结语

数学方面还是不够强, 得练.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/898605.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建一个job类库,运行项目出现异常“使用顶级语句的程序必须是可执行文件”

异常: 此项目的入口使用顶级语句的方式非Main函数 此时需要将项目的输出类型设置为可行文件类型(OutputType) 关于顶级语句参考

汉字和英文字符对齐研究

1. Windows记事本的情况 2. VS Code 的情况 3. VS 2022的情况 和记事本一样, 不再贴图。4. 总结 1) 不同的编辑器,不同的字体,情况不一样2) 中文和英文,需要不同的个数,才能完全对齐 3) 如果中英文字符数,不能达到上面的字数的倍数,无法对齐 4) 对于强迫症,可以通…

python的基本运用(4)——列表、元组和集合

一、列表(list) (1)列表的介绍和定义 1、类型:"list" 2、符号:[ ] 3、定义列表: a、[ ] 通过[ ] 来定义b、通过list 转换(2)列表的运用 1、通过索引添加值(覆盖原来的值)2、append 添加函数3、insert 在指定的索引位添加元素4、extend 连接两个列表5、rem…

2025 release of Visual Studio Code.

February 2025 (version 1.98) 更新后显示发行说明 Update 1.98.1: The update addresses these issues. Update 1.98.2: The update addresses these issues.Welcome to the February 2025 release of Visual Studio Code. There are many updates in this version that we ho…

销售秘籍:直觉与策略,让客户 “起死回生”

在销售领域里,有时候真得靠自己的直觉来行事。 干这行时间久了,直觉就越来越靠谱。说白了,这有点像一种难以言说的感觉;往正式了说,这就是基于行业经验的直觉判断,是一点点积累起来的。 首先得清楚,对于这类客户,别太纠结,毕竟95%的希望都没了,就当作是“希望不大”的…

UART简介

1.0 UART简介在Linux系统中,终端是一种字符型设备,它有多种类型,通常使用tty(Teletype)来简称各种类型的终端设备。对于嵌入式系统而言,最普遍采用的是UART(Universal Asynchronous Receiver / Transmitter )串行端口,日常生活中简称串口。UART(通用异步收发器)是…

拆解米尔RK3576开发板:瑞芯微第二代AIoT平台如何实现高性价比边缘计算?

文章来源:硬件笔记本最近,AI的风刮得是真猛啊!各种AI工具层出不穷,仿佛一夜之间,人工智能就从科幻走进了现实。作为一名硬件工程师,我自然也按捺不住内心的激动,琢磨着怎么把AI和硬件结合起来,搞点有意思的项目。 这不,机会来了!刚好看到国内知名主板厂商米尔电子新推…

博客迁移~

感谢还在关注本博客的各位朋友 (▽) 我新开了一个博客站点,组织内容跟当前站点的风格不同一样,采用知识花园的形式,内容基本上是我 Obsidian 笔记中挑选出比较完善的部分进行发布,同样也会有像本博客一样的文章,今后大部分内容都会发布在新站点,当然也会适当同步一些文章…

安川机器人DX100示教器维修常见故障合集

在现代工业生产中,安川机器人发挥着极为重要的作用。然而,如同任何设备一样,它们也会遭遇故障,尤其是DX100示教器部分。安川机器人维修、YASKAWA机器人维修(YASKAWA是安川的英文品牌名)、工业机器人维修都是保障生产持续进行的关键环节。对安川机器人示教器维修中的常见故…

SpringSecurity5(5-自定义短信、手机验证码)

本文介绍如何在 Spring Security 中自定义验证码和短信验证码校验,包括生成验证码、存储与校验逻辑、过滤器配置及适配认证流程,确保用户安全登录,同时提升灵活性与可扩展性。适用于登录安全加固及自定义认证需求。图形验证码 SpringSecurity 实现的用户名、密码登录是在 Us…

NineData社区版抢先体验,获取无人机、双肩包、充电宝等周边福利

NineData社区版现已正式上线,支持通过 Docker 部署至本地,保障数据安全与操作留存在本地。为庆祝发布,NineData 开启技术体验官征文活动,邀请开发者分享安装、使用及优化建议等经验。活动设置丰厚奖品,包括大疆无人机、高级旅行箱等,并提供多种加分机制,如真实场景分享和…

EtherCAT转Profinet揭秘网关模块促成西门子PLC与伺服电机通讯的协议转换秘诀案例​

一. 案例背景 西门子1200PLC通过捷米特JM-ECTM-PN(EtherCAT转ProfiNet)网关将松下伺服电机(包括不限于型号MHMFO22D1U2M)或EtherCAT协议的其它设备或连接到ProfiNetPLC上,并在正常运行中支持EtherCAT协议。本产品可作为EtherCAT主站,做为西门子S7-1200系列PLC的从站并在监…