tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
56
Task/Pythagorean-triples/Python/pythagorean-triples-1.py
Normal file
56
Task/Pythagorean-triples/Python/pythagorean-triples-1.py
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
from fractions import gcd
|
||||
|
||||
|
||||
def pt1(maxperimeter=100):
|
||||
'''
|
||||
# Naive method
|
||||
'''
|
||||
trips = []
|
||||
for a in range(1, maxperimeter):
|
||||
aa = a*a
|
||||
for b in range(a, maxperimeter-a+1):
|
||||
bb = b*b
|
||||
for c in range(b, maxperimeter-b-a+1):
|
||||
cc = c*c
|
||||
if a+b+c > maxperimeter or cc > aa + bb: break
|
||||
if aa + bb == cc:
|
||||
trips.append((a,b,c, gcd(a, b) == 1))
|
||||
return trips
|
||||
|
||||
def pytrip(trip=(3,4,5),perim=100, prim=1):
|
||||
a0, b0, c0 = a, b, c = sorted(trip)
|
||||
t, firstprim = set(), prim>0
|
||||
while a + b + c <= perim:
|
||||
t.add((a, b, c, firstprim>0))
|
||||
a, b, c, firstprim = a+a0, b+b0, c+c0, False
|
||||
#
|
||||
t2 = set()
|
||||
for a, b, c, firstprim in t:
|
||||
a2, a5, b2, b5, c2, c3, c7 = a*2, a*5, b*2, b*5, c*2, c*3, c*7
|
||||
if a5 - b5 + c7 <= perim:
|
||||
t2 |= pytrip(( a - b2 + c2, a2 - b + c2, a2 - b2 + c3), perim, firstprim)
|
||||
if a5 + b5 + c7 <= perim:
|
||||
t2 |= pytrip(( a + b2 + c2, a2 + b + c2, a2 + b2 + c3), perim, firstprim)
|
||||
if -a5 + b5 + c7 <= perim:
|
||||
t2 |= pytrip((-a + b2 + c2, -a2 + b + c2, -a2 + b2 + c3), perim, firstprim)
|
||||
return t | t2
|
||||
|
||||
def pt2(maxperimeter=100):
|
||||
'''
|
||||
# Parent/child relationship method:
|
||||
# http://en.wikipedia.org/wiki/Formulas_for_generating_Pythagorean_triples#XI.
|
||||
'''
|
||||
trips = pytrip((3,4,5), maxperimeter, 1)
|
||||
return trips
|
||||
|
||||
def printit(maxperimeter=100, pt=pt1):
|
||||
trips = pt(maxperimeter)
|
||||
print(" Up to a perimeter of %i there are %i triples, of which %i are primitive"
|
||||
% (maxperimeter,
|
||||
len(trips),
|
||||
len([prim for a,b,c,prim in trips if prim])))
|
||||
|
||||
for algo, mn, mx in ((pt1, 250, 2500), (pt2, 500, 20000)):
|
||||
print(algo.__doc__)
|
||||
for maxperimeter in range(mn, mx+1, mn):
|
||||
printit(maxperimeter, algo)
|
||||
14
Task/Pythagorean-triples/Python/pythagorean-triples-2.py
Normal file
14
Task/Pythagorean-triples/Python/pythagorean-triples-2.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
from sys import setrecursionlimit
|
||||
setrecursionlimit(2000) # 2000 ought to be big enough for everybody
|
||||
|
||||
def triples(lim, a = 3, b = 4, c = 5):
|
||||
l = a + b + c
|
||||
if l > lim: return (0, 0)
|
||||
return reduce(lambda x, y: (x[0] + y[0], x[1] + y[1]), [
|
||||
(1, lim / l),
|
||||
triples(lim, a - 2*b + 2*c, 2*a - b + 2*c, 2*a - 2*b + 3*c),
|
||||
triples(lim, a + 2*b + 2*c, 2*a + b + 2*c, 2*a + 2*b + 3*c),
|
||||
triples(lim, -a + 2*b + 2*c, -2*a + b + 2*c, -2*a + 2*b + 3*c) ])
|
||||
|
||||
for peri in [10 ** e for e in range(1, 8)]:
|
||||
print peri, triples(peri)
|
||||
7
Task/Pythagorean-triples/Python/pythagorean-triples-3.py
Normal file
7
Task/Pythagorean-triples/Python/pythagorean-triples-3.py
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
10 (0, 0)
|
||||
100 (7, 17)
|
||||
1000 (70, 325)
|
||||
10000 (703, 4858)
|
||||
100000 (7026, 64741)
|
||||
1000000 (70229, 808950)
|
||||
10000000 (702309, 9706567)
|
||||
Loading…
Add table
Add a link
Reference in a new issue