2652. 倍数求和

news/2024/11/20 1:20:49/

2652. 倍数求和

    • 题目
    • 方法-【枚举】 & 题目特征-【求计算在给定范围内满足某种条件的整数之和】
    • 方法-【容斥原理】 & 题目特征-【计算满足多个条件的元素之和,并且需要避免重复计数】

题目

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

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

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

方法-【枚举】 & 题目特征-【求计算在给定范围内满足某种条件的整数之和】

class Solution {
public:int sumOfMultiples(int n) {int sum = 0;for (int i = 1; i <= n; i++) if (i % 3 == 0 || i % 5 == 0 || i % 7 == 0) sum += i;return sum;}
};

方法-【容斥原理】 & 题目特征-【计算满足多个条件的元素之和,并且需要避免重复计数】

举个例子,当我们想要计算一共有多少只动物,但有些动物同时属于几个类别,我们可以使用容斥原理。

假设我们有三个类别的动物:猫、狗和兔子,并且我们有以下信息:

  • 喜欢猫的人数10
  • 喜欢狗的人数15
  • 喜欢兔子的人数8

我们想要找到同时喜欢三种动物的人数。

如果我们简单地将每个类别的动物数量相加,我们会得到10 + 15 + 8 = 33只动物。但这样计算会有重复计数的问题,因为有些动物同时属于多个类别。

为了避免重复计数,我们可以使用容斥原理。根据容斥原理,我们需要:

  • 将每个类别的动物数量相加;
  • 减去同时属于两个类别的动物数量;
  • 加上同时属于三个类别的动物数量。

因此,我们可以计算:10 + 15 + 8 - (猫 & 狗的数量) - (狗 & 兔子的数量) - (猫 & 狗 & 兔子的数量) = 1只动物。

通过应用容斥原理,我们得到了正确的结果,即一共有1只动物,避免了重复计数的问题。

这个题目和答案是乱写的,主要看题目特征和方法的匹配 — 之所以使用 xx方法(容斥原理),是因为题目有 xx 特征。

在 2652 这题:

  • 集合 A:能被 2 整除的数;
  • 集合 B:能被 3 整除的数;
  • 集合 C:能被 5 整除的数。

我们希望计算在给定范围内满足这些条件的数的总数,同时避免重复计数。

那我们需要容斥原理才能做到全面完整、不重不漏的计数。

具体看官网题解:

f(n, m) 表示在区间 [1, n] 内能被 m 整除的整数之和。

f(n, m) 函数计算方法:

class Solution {
private: int f(int n, int k){int cnt = n / k;                  // cnt * k 为小于等于n的最大数字return (k + cnt * k) * cnt / 2;   // 等差数列求和公式}
public:int sumOfMultiples(int n) {return f(n, 3) + f(n, 5) + f(n, 7) - f(n, 3*5) - f(n, 3 * 7) - f(n,5*7) + f(n, 3 * 5 * 7);}
};

或者

class Solution {
public:int sumOfMultiples(int n) {int sum = 0;int div3 = n / 3;int div5 = n / 5;int div7 = n / 7;int div15 = n / 15;int div21 = n / 21;int div35 = n / 35;int div105 = n / 105;sum = 3 * div3 * (div3 + 1) / 2+ 5 * div5 * (div5 + 1) / 2+ 7 * div7 * (div7 + 1) / 2- 15 * div15 * (div15 + 1) / 2- 21 * div21 * (div21 + 1) / 2- 35 * div35 * (div35 + 1) / 2+ 105 * div105 * (div105 + 1) / 2;return sum;}
};

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

相关文章

华为云应用中间件DCS系列—Redis实现(视频直播)消息弹幕

云服务、API、SDK&#xff0c;调试&#xff0c;查看&#xff0c;我都行 阅读短文您可以学习到&#xff1a;应用中间件系列之Redis实现&#xff08;视频直播&#xff09;消息弹幕 1 什么是DEVKIT 华为云开发者插件&#xff08;Huawei Cloud Toolkit&#xff09;&#xff…

Linux中使用nfs共享存储

NFS是一种基于TCP/IP传输的网络文件系统协议。通过使用NFS协议&#xff0c;客户机可以像访问本地目录一样访问远程服务器中的共享资源。对于大多数负载均衡群来说&#xff0c;使用NFS协议来共享数据存储是比较常见的做法&#xff0c;NFS也是存储设备必然支持的一种协议。但是由…

ubuntu 修改磁盘名称

前言&#xff1a; 最近重装了ubuntu系统&#xff0c;硬盘名称是一个很长的数字-字母序列&#xff0c;不太好看&#xff0c;根据磁盘的内存&#xff0c;把磁盘重命名了一下。 步骤1&#xff1a;查看当前所有磁盘及分区 sudo fdisk -l 根据存储容量的大小&#xff0c;找到对应…

G语言数组和切片

数组 数组是属于同一类型的元素的集合。例如&#xff0c;整数 5、8、9、79、76 的集合形成一个数组。Go 中不允许混合不同类型的值&#xff0c;例如同时包含字符串和整数的数组。 声明 数组属于类型[n]T。n表示数组中元素的数量&#xff0c;T表示每个元素的类型。元素的数量…

如何通过内网穿透实现远程连接NAS群晖drive并挂载电脑硬盘?

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

RabbitMQ的LazyQueue

在默认情况下&#xff0c;RabbitMQ会将接收到的信息保存在内存中以降低消息收发的延迟。但在某些特殊情况下&#xff0c;这会导致消息积压&#xff0c;比如&#xff1a; 消费者宕机或出现网络故障消息发送量激增&#xff0c;超过了消费者处理速度消费者处理业务发生阻塞 一旦…

JAVAEE初阶相关内容第十四弹--网络初识

写在前&#xff1a; 这一部分开启网络部分的相关知识&#xff0c;这一弹内容初始网络将主要进行网络相关知识的简单介绍&#xff0c;以及着重介绍协议、协议分层、OSI七层模型、TCP/IP五层模型、封装和分用。 需要认识协议&#xff0c;并知道协议的效果是什么&#xff1b;知道…

云爬虫系统设计:云平台资源管理优化爬虫性能

目录 1、云爬虫系统概述 2、云平台资源管理优化爬虫性能的关键措施 2.1 资源池化 2.2 负载均衡 2.3 任务调度 2.4 异常处理和恢复 2.5 数据存储与处理 2.6 数据清洗和去重 2.7 分布式爬虫 2.8 任务优先级与质量 2.9节能与环保 2.10监控与日志 总结 随着互联网的快…