📅  最后修改于: 2023-12-03 15:07:54.438000             🧑  作者: Mango
本程序旨在找到在给定正整数N以下,所有2和5的倍数的总和。我们将介绍两种不同的解决方案。
首先,我们可以使用暴力搜索来解决这个问题。具体步骤如下:
下面是具体的Python代码实现:
def sum_of_multiples_v1(n):
total_sum = 0
for i in range(1, n+1):
if i % 2 == 0 or i % 5 == 0:
total_sum += i
return total_sum
上述实现的时间复杂度是O(N)。那么我们有没有更加高效的解决方案呢?答案是有的。我们可以使用数学方法来优化性能。
我们可以发现,在N以下,2的倍数出现的次数为N/2,5的倍数出现的次数为N/5。但是,我们需要注意的是,有些数字可能既是2的倍数,也是5的倍数。因此,我们需要减去重复计入的数字。这些数字是同时是2和5的倍数的数字,它们出现的次数为N/lcm(2, 5),其中lcm(2, 5)表示2和5的最小公倍数。
该思路的具体步骤如下:
下面是具体的Python代码实现:
import math
def sum_of_multiples_v2(n):
multiples_of_2 = n // 2
multiples_of_5 = n // 5
multiples_of_10 = n // 10
lcm = 2 * 5 // math.gcd(2, 5)
multiples_of_lcm = n // lcm
total_sum = 2 * multiples_of_2 + 5 * multiples_of_5 - 10 * multiples_of_10 - lcm * multiples_of_lcm
return total_sum
我们介绍了两种解决方案,一种是暴力搜索,另一种是优化性能。在解决问题时,我们应该根据具体情况选择合适的方法。