Resposta do problema 001 - Multiples of 3 and 5

O primeiro problema do site é bem simples e acredito que muitos já fizeram scripts parecidos na faculdade. O objetivo é retornar a soma de todos os números múltiplos de 3 ou 5.
Multiples of 3 and 5

Problem 1

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.
Link para a pergunta: https://projecteuler.net/problem=1



Script que criei para resolver o problema:

soma = 0
for x in range(1,1000):
 if (x % 3 == 0) or (x % 5 == 0):
  soma += x

print(soma)


Resposta (answer) - Selecione a linha abaixo para ver a resposta

233168


Devemos ficar atento a condição que indica que o número pode ser divisível por 3 OU 5.

A instrução "for x in range(1,1000)" faz como se fosse um while e a variável x vai tendo seu valor acrescido em 1 cada vez que faz o loop até o número 999. Quando atinge o valor 1000 o programa sai do loop. Se eu desejasse que o número 1000 também entrasse na verificação eu teria que escrever a instrução for da seguinte forma: "for x in range(1,1001)".



Segue abaixo algumas outras soluções postadas no fórum:

Usuário: galah92

def serie_sum(diff, limit):
    """ Calculate the sum of all numbers divisible by diff up to the limit.
    Using the formula of sum of an arithemetic serie (Sn = n*(A1+An)/2),
    and the formula to the An term (An = A1+(n-1)*d), combinig our special case
    where A1 = d, we can derive our expression.
    Args:
        diff: plays as 'A1' and 'd' according to the formula.
        limit: biggest 'An' to reach to according to the formula.
    Returns:
        The sum of all numbers divisible by diff up to the limit.
    """
    return diff * (limit/diff) * (limit/diff+1) / 2

def main():
    """ If we calculate the sum of the numbers divisible by 3 and 5 seperately,
    we need to substract the sum of the numbers that are divisible by 15
    because they were counted twice.
    """
    print serie_sum(3, 999) + serie_sum(5, 999) - serie_sum(15, 999)

if __name__ == '__main__':
    main()


Resposta em uma linha do usuário cromod

print sum( val for val in range(1000) if val%3==0 or val%5==0 )

Nenhum comentário:

Postar um comentário