返回顶部

2652

给你一个正整数 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

最终结果
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 @ 2023-10-17 11:25  YuhangLiuCE  阅读(20)  评论(0编辑  收藏  举报