2652. 倍数求和
1.题目介绍
2.题解
2.1 枚举
思路
直接从[1,n]进行一次遍历,判断出能被整除的数便加到一个变量result中
代码
class Solution {
public:
int sumOfMultiples(int n) {
int result = 0;
for (int i = 1; i <=n; i++)
if (i % 3 == 0 || i % 5 == 0 || i % 7 == 0)
result += i;
return result;
}
};
代价
时间复杂度:O(n)。
空间复杂度:O(1)。
2.2 容斥原理
思路
找到所有能被3整除的数并求和,同理分别找到所有能被5,7整除的数并求和;这里就会存在一个问题,重复求和了同时能被3,5,7其中两个或三个整除的数,需要减除重复的
综合一下分析,考虑在区间 [1,n]内能被数 m 整除的整数,从小到大排序后成为一个等差数列,和为:
根据 容斥原理,在区间 [1,n] 内,能被 3、5和 7 整除的整数之和为:
代码
class Solution {
public:
int sumOfMultiples(int n) {
int result = 0;
return sumDividerNum(n,3) + sumDividerNum(n,5) + sumDividerNum(n,7) - sumDividerNum(n,3*5) - sumDividerNum(n,3*7) - sumDividerNum(n,5*7) + sumDividerNum(n, 3*5*7);
}
int sumDividerNum(int n, int m){
return (m+m*(n/m))*(n/m)/2;
}
};
代价
时间复杂度:O(1)。
空间复杂度:O(1)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了