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

洛谷题目: P2398 GCD SUM 题解 (本题较难,省选-难度)

题目传送门:

P2398 GCD SUM - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

前言:

本题涉及到 欧拉函数,素数判断,质数,筛法 ,三大知识点,相对来说还是比较难的。

本题要求我们计算     \sum_{i = 1}^{n}\sum_{j = 1}^{n}\gcd(i, j)   ,也就是对所有满足   1\leq i\leq n  和  1\leq j \leq n 

的整数对   (i,j)   ,求出它们的最大公约数并将这些最大公约数累加起来。

#使用暴力枚举思路:

        1、原理:

                最直接的方法就是通过两层嵌套循环遍历所有可能的   (i,j)   组合,对于每一对  (i,j)   计算它们的最大公约数    gcd(i,j)   ,并将结果累加到总和当中。

        代码示例(以Python语言示例):

sum = 0
for i from 1 to n:for j from 1 to n:sum = sum + gcd(i, j)
print(sum)

##复杂度分析:

        1、时间复杂度:

                O(n^{2} logn)  。因为有两层嵌套循环,循环次数为  n *n=n^{2}  ,而计算        gcd(i,j)  通常使用欧几里得算法,其时间复杂度为    O(log \: min(i,j))   ,最坏情况下为O(log n)。

        2、空间复杂度:

                O(1)   , 只使用了常数级的额外空间。

缺点:(i,j)

        当   n  较大时,  n^{2}  级别的时间复杂度会导致陈旭运行的时间超出时间的限制。

###枚举最大公约数思路:

        原理:

                我们可以换个角度来想,枚举最大公约数 d  的值,然后总计满足      gcd(i,j)=b   的整数对  (i,j)   的数量     cnt_{d}   ,最后将   d*cnt_{d}   累加到总和当中。

                设     g(d)   表示     gcd(i,j)  是  d  的倍数的整数对   (i,j)  的数量。因为  gcd(i,j)   是  d  的倍数意味着  i  和  j  都是  d  的倍数,所以在 1 到  n  的范围内 i  有      $\lfloor \frac{n}{d}\rfloor$    种选择,j  也有   $\lfloor \frac{n}{d}\rfloor$  种选择,那么   g(d)= \frac{n}{d} * \frac{n}{d}   。

                而我们要求的是     gcd(i,j)=d  的整数对数量,通过容斥,从   g(d)  中减去  gcd(i,j)   是 2d,3d,……的整数对数量,我们就可以得到     gcd(i,j)=d    的整数对数量。

 代码示例:

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、时间复杂度:

                O(n^{2} logn)  。虽然比暴力枚举 有一定优化,但是仍然比较高,因为内层嵌套循环计算       gcd(i,j)=1  的对数时复杂度比较高。

        2、空间复杂度:

                O(1)。

利用莫比乌斯反演优化思路:

        原理:

                相信学过数论的人都知道,莫比乌斯反演是数论中的重要工具之一,它主用于解决这类和最大公约数相关的求和问题。设    f(d)    表示  gcd(i,j)   的整数对  (i,j)  的数量,  g(d)  表示    gcd(i,j)   是  d  的倍数整数对  (i,j)  的数量,根据定义有

                                                

                我们根据莫比乌斯反演公式,   ,其中     是莫比乌斯函数。

                我们可以先预处理出莫比乌斯函数   ,然后进行枚举 d ,计算出  g(d)=\left\lfloor\frac{n}{d}\right\rfloor\times\left\lfloor\frac{n}{d}\right\rfloor  ,再根据莫比乌斯繁衍共识计算  f(d)  ,最后将   d*f(d)  累加到总和当中。

#####复杂度分析:

        1、时间复杂度:

                预处理莫比乌斯函数的时间复杂度为  O(n)  ,枚举 d 计算答案的时间复杂度为  O(nlogn)  。

        2、空间复杂度:

                O(n)  ,主要用于存储莫比乌斯函数。

利用欧拉函数优化思路:

        原理:

                欧拉函数  表示小于等于 n 且与 n 互质的正整数的个数。

                我们可以将原问题转化为与欧拉函数相关的形式。对于固定的 d ,我们可以利用欧拉函数的性质来计算满足     gcd(i,j)=d  的整数对  (i,j)  的数量。

######复杂度分析:

        1、时间复杂度:

                预处理欧拉函数的时间复杂度为   O(nloglogn)  ,枚举 d 计算答案的时间复杂度  O(n)  ,所以总的时间复杂度为  O(nloglogn)  。

        2、空间复杂度:

                O(n)  ,主要用于存储欧拉函数。

#######代码:

#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 题解 (本题较难,省选-难度)

题目传送门&#xff1a; P2398 GCD SUM - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 前言&#xff1a; 本题涉及到 欧拉函数&#xff0c;素数判断&#xff0c;质数&#xff0c;筛法 &#xff0c;三大知识点&#xff0c;相对来说还是比较难的。 本题要求我们计算 …...

kubernetes-cni 框架源码分析

深入探索 Kubernetes 网络模型和网络通信 Kubernetes 定义了一种简单、一致的网络模型&#xff0c;基于扁平网络结构的设计&#xff0c;无需将主机端口与网络端口进行映射便可以进行高效地通讯&#xff0c;也无需其他组件进行转发。该模型也使应用程序很容易从虚拟机或者主机物…...

AI Agent有哪些痛点问题

AI Agent有哪些痛点问题 目录 AI Agent有哪些痛点问题AI Agent领域有哪些知名的论文缺乏一个将智能多智能体技术和在真实环境中学习的两个适用流程结合起来的统一框架LLM的代理在量化和客观评估方面存在挑战自主代理在动态环境中学习、推理和驾驭不确定性存在挑战AI Agent领域有…...

使用Java爬虫获取京东JD.item_sku API接口数据

在电商领域&#xff0c;商品的SKU&#xff08;Stock Keeping Unit&#xff09;信息是运营和管理的关键数据。SKU信息包括商品的规格、价格、库存等&#xff0c;对于商家的库存管理、定价策略和市场分析至关重要。京东作为国内领先的电商平台&#xff0c;提供了丰富的API接口&am…...

华为云+硅基流动使用Chatbox接入DeepSeek-R1满血版671B

华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 硅基流动 1.1 注册登录 1.2 实名认证 1.3 创建API密钥 1.4 客户端工具 OllamaChatboxCherry StudioAnythingLLM 资源包下载&#xff1a; AI聊天本地客户端 接入Chatbox客户端 点击设置 选择SiliconFloW API 粘贴1.3创…...

平方数列与立方数列求和的数学推导

先上结论&#xff1a; 平方数列求和公式为&#xff1a; S 2 ( n ) n ( n 1 ) ( 2 n 1 ) 6 S_2(n) \frac{n(n1)(2n1)}{6} S2​(n)6n(n1)(2n1)​ 立方数列求和公式为&#xff1a; S 3 ( n ) ( n ( n 1 ) 2 ) 2 S_3(n) \left( \frac{n(n1)}{2} \right)^2 S3​(n)(2n(n1)​…...

Java中的synchronized关键字与锁升级机制

在多线程编程中&#xff0c;线程同步是确保程序正确执行的关键。当多个线程同时访问共享资源时&#xff0c;如果不进行同步管理&#xff0c;可能会导致数据不一致的问题。为了避免这些问题&#xff0c;Java 提供了多种同步机制&#xff0c;其中最常见的就是 synchronized 关键字…...

告别传统校准!GNSS模拟器在计量行业的应用

随着GNSS技术的不断进步&#xff0c;各类设备广泛采用该技术实现高精度定位&#xff0c;并推动了其在众多领域的广泛应用。对于关键行业如汽车制造和基础设施&#xff0c;设备的可用性和可靠性被视为基本准则&#xff0c;GNSS作为提供“绝对位置”信息的关键传感器&#xff0c;…...

数据结构结尾

1.二叉树的分类 搜索二叉树&#xff0c;平衡二叉树&#xff0c;红黑树&#xff0c;B树&#xff0c;B树 2.Makefile文件管理 注意&#xff1a; 时间戳&#xff1a;根据时间戳&#xff0c;只编译发生修改后的文件 算法&#xff1a; 算法有如上五个要求。 算法的时间复杂度&am…...

【golang】量化开发学习(一)

均值回归策略简介 均值回归&#xff08;Mean Reversion&#xff09;假设价格会围绕均值波动&#xff0c;当价格偏离均值一定程度后&#xff0c;会回归到均值。 基本逻辑&#xff1a; 计算一段时间内的移动均值&#xff08;如 20 天均线&#xff09;。当当前价格高于均值一定比…...

AI前端开发:跨领域合作的新引擎

随着人工智能技术的飞速发展&#xff0c;AI代码生成器等工具的出现正深刻地改变着软件开发的模式。 AI前端开发的兴起&#xff0c;不仅提高了开发效率&#xff0c;更重要的是促进了跨领域合作&#xff0c;让数据科学家、UI/UX设计师和前端工程师能够更紧密地协同工作&#xff0…...

数组练习(深入理解、实践数组)

1.练习1&#xff1a;多个字符从两端移动&#xff0c;向中间汇聚 编写代码&#xff0c;演示多个字符从两端移动&#xff0c;向中间汇聚 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> int main() {//解题思路&#xff1a;//根据题意再…...

Bigemap Pro如何进行面裁剪

一般在处理矢量数据&#xff0c;制图过程中&#xff0c;常常会用到面文件的裁剪功能&#xff0c;那么有没有一个工具可以同时实现按照线、顶点、网格以及面来裁剪呢&#xff1f;今天给大家介绍一个宝藏工具&#xff0c;叫做Bigemap Pro&#xff0c;在这里工具里面可以实现上述面…...

acwing算法全总结-数学知识

快速幂 原题链接&#xff1a;快速幂 ac代码&#xff1a; #include<iostream> #include<algorithm> using namespace std; typedef long long LL; LL qmi(int a,int b,int p) {LL res1%p;while(b)//这里本应该分两次进行&#xff0c;不过只有一次询问{if(b&1)…...

SpringMVC学习使用

一、SpringMVC简单理解 1.1 Spring与Web环境集成 1.1.1 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件) 方式获取的&#xff0c;但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext(sp…...

10、《文件上传与下载:MultipartFile与断点续传设计》

文件上传与下载&#xff1a;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 大语言模型的对比分析

在人工智能领域&#xff0c;DeepSeek、Kimi、文心一言和通义千问作为国内领先的 AI 大语言模型&#xff0c;各自展现出了独特的特点和优势。本文将从技术基础、应用场景、用户体验和价格与性价比等方面对这四个模型进行对比分析&#xff0c;帮助您更好地了解它们的特点和优势。…...

Docker compose 以及镜像使用

Docker compose 以及镜像使用 高级配置 使用 Docker Compose Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。以下是一个 docker-compose.yml 示例&#xff1a; version: 3 services:web:image: my-appbuild: .ports:- "8000:8000"volumes:- …...

HCIA项目实践--RIP相关原理知识面试问题总结回答

9.4 RIP 9.4.1 补充概念 什么是邻居&#xff1f; 邻居指的是在网络拓扑结构中与某一节点&#xff08;如路由器&#xff09;直接相连的其他节点。它们之间可以直接进行通信和数据交互&#xff0c;能互相交换路由信息等&#xff0c;以实现网络中的数据转发和路径选择等功能。&am…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

嵌入式面试常问问题

以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...