LeetCode 2652. 倍数求和:O(1)做法 - 容斥原理

news/2024/11/19 13:40:59/

【LetMeFly】2652.倍数求和:O(1)做法 - 容斥原理

力扣题目链接:https://leetcode.cn/problems/sum-multiples/

给你一个正整数 n ,请你计算在 [1,n] 范围内能被 357 整除的所有整数之和。

返回一个整数,用于表示给定范围内所有满足约束条件的数字之和。

 

示例 1:

输入:n = 7
输出:21
解释:[1, 7] 范围内能被 3、5、7 整除的所有整数分别是 3、5、6、7 。数字之和为 21

示例 2:

输入:n = 10
输出:40
解释:[1, 10] 范围内能被 3、5、7 整除的所有整数分别是 3、5、6、7、9、10 。数字之和为 40

示例 3:

输入:n = 9
输出:30
解释:[1, 9] 范围内能被 3、5、7 整除的所有整数分别是 3、5、6、7、9 。数字之和为 30

 

提示:

  • 1 <= n <= 103

方法一:O(1)做法 - 容斥原理

1 1 1 n n n的数中,是 k k k的倍数的数有哪些呢?当然是 k k k 2 k 2k 2k ⋯ \cdots ⌊ n k ⌋ × k \lfloor\frac{n}{k}\rfloor\times k kn×k

他们的和为多少呢?等差数列求和公式为 ( 首项 + 尾项 ) × 项数 2 \frac{(首项+尾项)\times 项数}{2} 2(首项+尾项)×项数,因此他们的和为 ( k + ⌊ n k ⌋ × k ) × ⌊ n k ⌋ 2 \frac{(k + \lfloor\frac{n}{k}\rfloor\times k)\times \lfloor\frac{n}{k}\rfloor}{2} 2(k+kn×k)×kn

根据容斥原理,一个集合中,是 3 3 3的倍数或是 5 5 5的倍数或是 7 7 7的倍数的数,等于 f ( 3 ) + f ( 5 ) + f ( 7 ) − f ( 3 × 5 ) − f ( 3 × 7 ) − f ( 5 × 7 ) + f ( 3 × 5 × 7 ) f(3) + f(5) + f(7) - f(3\times5) - f(3\times 7) - f(5\times 7) + f(3\times 5\times 7) f(3)+f(5)+f(7)f(3×5)f(3×7)f(5×7)+f(3×5×7),其中 f ( k ) f(k) f(k)代表是 k k k的倍数的数。

  • 时间复杂度 O ( 1 ) O(1) O(1)
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
class Solution {
private:int n;inline int f(int k) {return (k + n / k * k) * (n / k) / 2;  // (首项 + 尾项) * 项数 / 2}
public:int sumOfMultiples(int n) {this->n = n;return f(3) + f(5) + f(7) - f(15) - f(21) - f(35) + f(105);}
};
Python
class Solution:def sumOfMultiples(self, n: int) -> int:def f(k: int) -> int:return (k + n // k * k) * (n // k) // 2return f(3) + f(5) + f(7) - f(15) - f(21) - f(35) + f(105)

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/133876939


http://www.ppmy.cn/news/1158468.html

相关文章

css 文字溢出问题

文字溢出处理方案 : 1首先 , 强制文本在一行中显示 ; white-space: nowrap; 2然后 , 隐藏文本的超出部分 ; overflow: hidden; 3最后 , 使用省略号代替文本超出部分 ; text-overflow: ellipsis; white-space 样式 用于设置 文本显示方式 : 默认方式 : 显示多行 ; white-s…

【Java】Spring Cloud 智慧工地信息云平台源码(PC端+APP端)项目平台、监管平台、大数据平台

智慧工地是目前建筑行业的热门话题之一&#xff0c;它代表了未来建筑施工的发展趋势。那么&#xff0c;智慧工地的未来&#xff0c;你看好吗&#xff1f; 从技术角度来看&#xff0c;智慧工地无疑是未来发展的趋势。随着人工智能、大数据、云计算等技术的飞速发展&#xff0c;智…

尚硅谷Docker核心技术

目录 第1课时 docker_前提知识要求和课程简介第2课时 docker_为什么会出现第3课时 docker_理念第4课时 docker_是什么&#xff1f;第5课时 docker_能干什么第6课时 docker_3要素第7课时 centos6安装Dockercentos7安装Docker第9课时 阿里云镜像加速器配置第10课时 helloworld镜像…

使用 Elasticsearch 作为向量数据库:深入研究 dense_vector 和 script_score

Elasticsearch 是一个非常强大且灵活的搜索和分析引擎。 虽然其主要用例围绕全文搜索&#xff0c;但它的用途广泛&#xff0c;足以用于各种其他功能。 其中一项引起许多开发人员和数据科学家关注的功能是使用 Elasticsearch 作为向量数据库。 随着 dense_vector 数据类型的出现…

视频录制软件推荐,哪个才是最适合你的?

在数字时代&#xff0c;视频已成为我们分享信息、记录回忆和教育他人的重要媒介。无论是记录游戏过程、制作教程、还是在线会议&#xff0c;一款好用的视频录制软件都能为用户带来诸多便利。本文将深入介绍三款强大的视频录制软件&#xff0c;通过分步骤详细撰写&#xff0c;让…

pip快速安装torch、opencv、scipy库

目录 一、pip安装torch 1.1 torch介绍 1.2 torch.nn相关库的导入 1.3win10上torch的安装命令 二、pip安装Opencv 三、pip安装scipy库 一、pip安装torch 1.1 torch介绍 torch的基本功能&#xff1a; ①torch&#xff1a;张量的相关运算&#xff0c;例如&#xff1a;创…

【Unity3D编辑器开发】Unity3D中实现Transform组件拓展,快速复制、粘贴、复原【非常实用】

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中&#xff0c;常常会遇到频繁复制粘贴物体的坐标、旋转…

图解Dubbo,Dubbo 服务治理详解

目录 一、介绍1、介绍 Dubbo 服务治理的基本概念和重要性2、阐述 Dubbo 服务治理的实现方式和应用场景 二、Dubbo 服务治理的原理1、Dubbo 服务治理的架构设计2、Dubbo 服务治理的注册与发现机制3、Dubbo 服务治理的负载均衡算法 三、Dubbo 服务治理的实现方式1、基于 Docker 容…