Created
July 8, 2011 04:50
-
-
Save tarsisazevedo/1071172 to your computer and use it in GitHub Desktop.
euler 12
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from unittest import TestCase, main | |
import math | |
class TestNumerosTriangulares(TestCase): | |
def test_numero_28_deve_ter_5_divisores(self): | |
"""docstring for test_numero_28_deve_ter_5_divisores""" | |
self.assertEquals(primeiro_numero_triangular_com(divisores=5), 28) | |
def test_numero_x_deve_ter_500_divisores(self): | |
"""docstring for test_numero_x_deve_ter_500_divisores""" | |
self.assertEquals(primeiro_numero_triangular_com(divisores=500), 76576500) | |
def primeiro_numero_triangular_com(divisores): | |
divisores_numero = 0 | |
posicao_na_sequencia = 1 | |
while divisores_numero <= divisores: | |
posicao_na_sequencia += 1 | |
proximo_numero = sum(range(1, posicao_na_sequencia + 1)) | |
numero = int(math.sqrt(proximo_numero)) | |
divisores_numero = len([i for i in range(1, numero + 1 ) if proximo_numero % i == 0]) * 2 | |
return proximo_numero | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Eu fiz de forma diferente. Sei que existe uma propriedade que diz que
dado que x possa ser fatorado (em fatores primos) como x1^k1 + ... + xm^km
o número x tem exatamente
(k1 + 1) * ... * (km + 1) divisores próprios
Com isso, tenho essa solução: https://github.com/juanplopes/euler/blob/master/0012.boo
Que sai em 0.4s (mas é compilado)