返回顶部

2652

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

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

 

示例 1:

[1, 7]
57 整除的所有整数分别是
 3567
21

示例 2:

[1, 10]
57 整除的所有整数分别是
 3567910
40
复制代码
class Solution(object):
    def sumOfMultiples(self, n):
        """
        :type n: int
        :rtype: int
        """
        num_three = n//3
        num_five = n//5
        num_seven = n//7
        num_15 = n//15
        num_21 = n//21
        num_35 = n//35
        num_105 = n//105
        return 3*num_three+num_three*(num_three-1)*3/2+5*num_five+num_five*(num_five-1)*5/2+7*num_seven+num_seven*(num_seven-1)*7/2+105*num_105+num_105*(num_105-1)*105/2-15*num_15-num_15*(num_15-1)*15/2-21*num_21-num_21*(num_21-1)*21/2-35*num_35-num_35*(num_35-1)*35/2
复制代码

 

 

经过:最开始没想用暴力解法 感觉能用数学知识做 但是我的思路里面没有考虑到15这种既是3又是5的倍数的数 所以会计算两次

复制代码
class Solution(object):
    def sumOfMultiples(self, n):
        """
        :type n: int
        :rtype: int
        """
        num_three = n//3
        num_five = n//5
        num_seven = n//7
        return 3*num_three+num_three*(num_three-1)*3/2+5*num_five+num_five*(num_five-1)*5/2+7*num_seven+num_seven*(num_seven-1)*7/2
复制代码

尝试两次WA后 感觉不知道怎么解决 

遂尝试暴力

顺利解决

复制代码
class Solution(object):
    def sumOfMultiples(self, n):
        """
        :type n: int
        :rtype: int
        """
        ans = 0
        for i in range(1,n+1):
            if(i%3 == 0 or i%5==0 or i%7 ==0):
                ans = ans + i
        return ans
复制代码

过了 但是感觉不能靠暴力解决 且最近也是想学一学算法

遂看题解 新学一知识叫做容斥原理

于是再尝试 第一次因为+ - 错误 

第二次通过 但是看起来实在冗长 确实不如题解中那样再写一个函数简洁

 

 

posted @   YuhangLiuCE  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示