download: pythagoras.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from math import pow
import timing
def pythagoras(x,y,z):
return (pow(x,2)+pow(y,2) == pow(z,2))
def mcd(a,b): # algoritmo de euclides
if (a == b): return a
elif (a < b): a,b = b,a # a es el más grande
while(b != 0):
r = a % b
a = b
b = r
return a
def rprim(x,y,z):
return (mcd(mcd(x,y),z) == 1)
def solv106s(N):
miembros_tripletes = []
tripletes_rprim = 0
for x in range(1,N+1):
for y in range(1,N+1):
for z in range(y+1,N+1):
if (x<y<z and pythagoras(x,y,z)):
for a in [x,y,z]:
if a not in miembros_tripletes:
miembros_tripletes.append(a)
if (rprim(x,y,z)):
tripletes_rprim +=1
no_miembros = N - len(miembros_tripletes)
return N, tripletes_rprim, no_miembros
def solv106(N):
miembros_tripletes = []
tripletes_rprim = 0
for x in range(1,N-1):
for y in range(x+1,N):
for z in range(y+1,N+1):
if (pythagoras(x,y,z)):
for a in [x,y,z]:
if a not in miembros_tripletes:
miembros_tripletes.append(a)
if (rprim(x,y,z)):
tripletes_rprim +=1
no_miembros = N - len(miembros_tripletes)
return N, tripletes_rprim, no_miembros
def test(N=1000):
timing.start()
solv106s(N)
timing.finish()
print "la primer solucion tardo " + str(timing.seconds()) + " segundos"
timing.start()
solv106(N)
timing.finish()
print "la segunda solucion tardo " + str(timing.seconds()) + " segundos"
if __name__ == '__main__':
test()