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()

Copyleft 2006 Juanjo Conti