3和5的倍数之和

Tec*_*att 4 python

我必须在给定的N个数(不包括N个)的范围内计算3和5(包括它们自己)的所有倍数的总和。我创建了一个python代码,它适用于N = 10,但不适用于N =100。我不明白为什么。

这是代码:

#!/bin/python3
import sys
def multiples_sum(n):
    sum1 = 0
    for i in range(n):
        if i % 3 == 0:
            sum1 = sum1 + i
        if i % 5 == 0:
            sum1 = sum1 + i
    return sum1
t = int(input().strip())
for a0 in range(t):
    n = int(input().strip())
    print(multiples_sum(n))
Run Code Online (Sandbox Code Playgroud)

hir*_*ist 5

您正在计算15的倍数(= 3 * 5)两次。

您的代码应该是

for i in range(n):
    if i % 3 == 0:
        sum1 += i
    elif i % 5 == 0:
        sum1 += i
Run Code Online (Sandbox Code Playgroud)

注意elif而不是if

或者:

for i in range(n):
    if i % 3 == 0 or i % 5 == 0:
        sum1 += i
Run Code Online (Sandbox Code Playgroud)

或直接(如DeepSpace在评论中建议的那样)

sum1 = sum(i for i in range(n) if 0 in {i % 3, i % 5})
Run Code Online (Sandbox Code Playgroud)

请注意,根本不需要循环:知道从1到(包括)的整数之和n

def sum_to(n): 
    return ((n+1)*n)//2
Run Code Online (Sandbox Code Playgroud)

您可以从以下地址获取您的电话号码:

sum1 = 5 * sum_to((n-1)//5) + 3 * sum_to((n-1)//3) - 15 * sum_to((n-1)//15)
Run Code Online (Sandbox Code Playgroud)

(可以将其概括化,并使其更漂亮……但是我敢肯定,您会以这种形式得到这个想法)。