洛谷题目: P2398 GCD SUM 题解 (本题较难,省选-难度)
题目传送门:
P2398 GCD SUM - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
前言:
本题涉及到 欧拉函数,素数判断,质数,筛法 ,三大知识点,相对来说还是比较难的。
本题要求我们计算 ,也就是对所有满足
和
的整数对 ,求出它们的最大公约数并将这些最大公约数累加起来。
#使用暴力枚举思路:
1、原理:
最直接的方法就是通过两层嵌套循环遍历所有可能的 组合,对于每一对
计算它们的最大公约数
,并将结果累加到总和当中。
代码示例(以Python语言示例):
sum = 0
for i from 1 to n:for j from 1 to n:sum = sum + gcd(i, j)
print(sum)
##复杂度分析:
1、时间复杂度:
。因为有两层嵌套循环,循环次数为
,而计算
通常使用欧几里得算法,其时间复杂度为
,最坏情况下为O(log n)。
2、空间复杂度:
, 只使用了常数级的额外空间。
缺点:
当 较大时,
级别的时间复杂度会导致陈旭运行的时间超出时间的限制。
###枚举最大公约数思路:
原理:
我们可以换个角度来想,枚举最大公约数 的值,然后总计满足
的整数对
的数量
,最后将
累加到总和当中。
设 表示
是
的倍数的整数对
的数量。因为
是
的倍数意味着
和
都是
的倍数,所以在 1 到
的范围内
有
种选择,
也有
种选择,那么
。
而我们要求的是 的整数对数量,通过容斥,从
中减去
是 2d,3d,……的整数对数量,我们就可以得到
的整数对数量。
代码示例:
sum = 0
for d from 1 to n:cnt = 0for i from 1 to n/d:for j from 1 to n/d:if gcd(i, j) == 1:cnt = cnt + 1sum = sum + d * cnt
print(sum)
####复杂度分析:
1、时间复杂度:
。虽然比暴力枚举 有一定优化,但是仍然比较高,因为内层嵌套循环计算
=1 的对数时复杂度比较高。
2、空间复杂度:
O(1)。
利用莫比乌斯反演优化思路:
原理:
相信学过数论的人都知道,莫比乌斯反演是数论中的重要工具之一,它主用于解决这类和最大公约数相关的求和问题。设 表示
的整数对
的数量,
表示
是
的倍数整数对
的数量,根据定义有

我们根据莫比乌斯反演公式,
,其中
是莫比乌斯函数。
我们可以先预处理出莫比乌斯函数
,然后进行枚举 ,计算出
,再根据莫比乌斯繁衍共识计算
,最后将
累加到总和当中。
#####复杂度分析:
1、时间复杂度:
预处理莫比乌斯函数的时间复杂度为 ,枚举 d 计算答案的时间复杂度为
。
2、空间复杂度:
,主要用于存储莫比乌斯函数。
利用欧拉函数优化思路:
原理:
欧拉函数
表示小于等于 且与
互质的正整数的个数。
我们可以将原问题转化为与欧拉函数相关的形式。对于固定的 ,我们可以利用欧拉函数的性质来计算满足
的整数对
的数量。
######复杂度分析:
1、时间复杂度:
预处理欧拉函数的时间复杂度为 ,枚举 d 计算答案的时间复杂度
,所以总的时间复杂度为
。
2、空间复杂度:
,主要用于存储欧拉函数。
#######代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;// 预处理莫比乌斯函数
vector<int> num, p;
vector<bool> s;
void M(int n) {num.resize(n + 1);s.resize(n + 1, true);num[1] = 1;for (int i = 2; i <= n; ++i) {if (s[i]) {p.push_back(i);num[i] = -1;}for (int j = 0; j < p.size() && i * p[j] <= n; ++j) {s[i * p[j]] = false;if (i % p[j] == 0) {num[i * p[j]] = 0;break;}num[i * p[j]] = -num[i];}}
}int main() {int n;cin >> n;M(n);LL ans = 0;// 枚举 gcd 的值 dfor (int d = 1; d <= n; ++d) {LL g = 0;int m = n / d;// 计算 g(d)for (int k = 1; k <= m; ++k) {g += (LL)num[k] * (m / k) * (m / k);}ans += d * g;}cout << ans << endl;return 0;
}
相关文章:
洛谷题目: P2398 GCD SUM 题解 (本题较难,省选-难度)
题目传送门: P2398 GCD SUM - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 前言: 本题涉及到 欧拉函数,素数判断,质数,筛法 ,三大知识点,相对来说还是比较难的。 本题要求我们计算 …...
kubernetes-cni 框架源码分析
深入探索 Kubernetes 网络模型和网络通信 Kubernetes 定义了一种简单、一致的网络模型,基于扁平网络结构的设计,无需将主机端口与网络端口进行映射便可以进行高效地通讯,也无需其他组件进行转发。该模型也使应用程序很容易从虚拟机或者主机物…...
AI Agent有哪些痛点问题
AI Agent有哪些痛点问题 目录 AI Agent有哪些痛点问题AI Agent领域有哪些知名的论文缺乏一个将智能多智能体技术和在真实环境中学习的两个适用流程结合起来的统一框架LLM的代理在量化和客观评估方面存在挑战自主代理在动态环境中学习、推理和驾驭不确定性存在挑战AI Agent领域有…...
使用Java爬虫获取京东JD.item_sku API接口数据
在电商领域,商品的SKU(Stock Keeping Unit)信息是运营和管理的关键数据。SKU信息包括商品的规格、价格、库存等,对于商家的库存管理、定价策略和市场分析至关重要。京东作为国内领先的电商平台,提供了丰富的API接口&am…...
华为云+硅基流动使用Chatbox接入DeepSeek-R1满血版671B
华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 硅基流动 1.1 注册登录 1.2 实名认证 1.3 创建API密钥 1.4 客户端工具 OllamaChatboxCherry StudioAnythingLLM 资源包下载: AI聊天本地客户端 接入Chatbox客户端 点击设置 选择SiliconFloW API 粘贴1.3创…...
平方数列与立方数列求和的数学推导
先上结论: 平方数列求和公式为: S 2 ( n ) n ( n 1 ) ( 2 n 1 ) 6 S_2(n) \frac{n(n1)(2n1)}{6} S2(n)6n(n1)(2n1) 立方数列求和公式为: S 3 ( n ) ( n ( n 1 ) 2 ) 2 S_3(n) \left( \frac{n(n1)}{2} \right)^2 S3(n)(2n(n1)…...
Java中的synchronized关键字与锁升级机制
在多线程编程中,线程同步是确保程序正确执行的关键。当多个线程同时访问共享资源时,如果不进行同步管理,可能会导致数据不一致的问题。为了避免这些问题,Java 提供了多种同步机制,其中最常见的就是 synchronized 关键字…...
告别传统校准!GNSS模拟器在计量行业的应用
随着GNSS技术的不断进步,各类设备广泛采用该技术实现高精度定位,并推动了其在众多领域的广泛应用。对于关键行业如汽车制造和基础设施,设备的可用性和可靠性被视为基本准则,GNSS作为提供“绝对位置”信息的关键传感器,…...
数据结构结尾
1.二叉树的分类 搜索二叉树,平衡二叉树,红黑树,B树,B树 2.Makefile文件管理 注意: 时间戳:根据时间戳,只编译发生修改后的文件 算法: 算法有如上五个要求。 算法的时间复杂度&am…...
【golang】量化开发学习(一)
均值回归策略简介 均值回归(Mean Reversion)假设价格会围绕均值波动,当价格偏离均值一定程度后,会回归到均值。 基本逻辑: 计算一段时间内的移动均值(如 20 天均线)。当当前价格高于均值一定比…...
AI前端开发:跨领域合作的新引擎
随着人工智能技术的飞速发展,AI代码生成器等工具的出现正深刻地改变着软件开发的模式。 AI前端开发的兴起,不仅提高了开发效率,更重要的是促进了跨领域合作,让数据科学家、UI/UX设计师和前端工程师能够更紧密地协同工作࿰…...
数组练习(深入理解、实践数组)
1.练习1:多个字符从两端移动,向中间汇聚 编写代码,演示多个字符从两端移动,向中间汇聚 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> int main() {//解题思路://根据题意再…...
Bigemap Pro如何进行面裁剪
一般在处理矢量数据,制图过程中,常常会用到面文件的裁剪功能,那么有没有一个工具可以同时实现按照线、顶点、网格以及面来裁剪呢?今天给大家介绍一个宝藏工具,叫做Bigemap Pro,在这里工具里面可以实现上述面…...
acwing算法全总结-数学知识
快速幂 原题链接:快速幂 ac代码: #include<iostream> #include<algorithm> using namespace std; typedef long long LL; LL qmi(int a,int b,int p) {LL res1%p;while(b)//这里本应该分两次进行,不过只有一次询问{if(b&1)…...
SpringMVC学习使用
一、SpringMVC简单理解 1.1 Spring与Web环境集成 1.1.1 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件) 方式获取的,但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext(sp…...
10、《文件上传与下载:MultipartFile与断点续传设计》
文件上传与下载:MultipartFile与断点续传设计 一、基础文件上传与MultipartFile解析 1.1 Spring MVC文件上传基础 PostMapping("/upload") public String handleFileUpload(RequestParam("file") MultipartFile file) {if (!file.isEmpty())…...
DeepSeek 本地部署(电脑安装)
1.先安装Ollama 开源框架 网址链接为:Ollama 2.点中间的下载 3.选系统 4.下载好就安装 5.输入命令ollama -v 6.点击Model 7.选如下 8.选版本 9.复杂对应命令 10.控制台粘贴下载 11.就可以问问题啦 12.配置UI界面(在扩展里面输入) 13.配置完即可打开 14.选择刚才安装的就好啦…...
DeepSeek、Kimi、文心一言、通义千问:AI 大语言模型的对比分析
在人工智能领域,DeepSeek、Kimi、文心一言和通义千问作为国内领先的 AI 大语言模型,各自展现出了独特的特点和优势。本文将从技术基础、应用场景、用户体验和价格与性价比等方面对这四个模型进行对比分析,帮助您更好地了解它们的特点和优势。…...
Docker compose 以及镜像使用
Docker compose 以及镜像使用 高级配置 使用 Docker Compose Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。以下是一个 docker-compose.yml 示例: version: 3 services:web:image: my-appbuild: .ports:- "8000:8000"volumes:- …...
HCIA项目实践--RIP相关原理知识面试问题总结回答
9.4 RIP 9.4.1 补充概念 什么是邻居? 邻居指的是在网络拓扑结构中与某一节点(如路由器)直接相连的其他节点。它们之间可以直接进行通信和数据交互,能互相交换路由信息等,以实现网络中的数据转发和路径选择等功能。&am…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
