File tree Expand file tree Collapse file tree 1 file changed +16
-10
lines changed
project_euler/problem_075 Expand file tree Collapse file tree 1 file changed +16
-10
lines changed Original file line number Diff line number Diff line change @@ -35,18 +35,24 @@ def solution(limit: int = 1500000) -> int:
35
35
6
36
36
>>> solution(1000)
37
37
112
38
+ >>> solution(50000)
39
+ 5502
40
+
41
+ Solution: we generate all pythagorean triples using Euclid's formula and
42
+ keep track of the frequencies of the perimeters.
43
+ Reference: https://en.wikipedia.org/wiki/Pythagorean_triple#Generating_a_triple
38
44
"""
39
- freqs : DefaultDict = defaultdict (int )
40
- m = 2
41
- while 2 * m * (m + 1 ) <= limit :
42
- for n in range ((m % 2 ) + 1 , m , 2 ):
43
- if gcd (m , n ) > 1 :
45
+ frequencies : DefaultDict = defaultdict (int )
46
+ euclid_m = 2
47
+ while 2 * euclid_m * (euclid_m + 1 ) <= limit :
48
+ for euclid_n in range ((euclid_m % 2 ) + 1 , euclid_m , 2 ):
49
+ if gcd (euclid_m , euclid_n ) > 1 :
44
50
continue
45
- perim = 2 * m * (m + n )
46
- for p in range (perim , limit + 1 , perim ):
47
- freqs [ p ] += 1
48
- m += 1
49
- return sum (1 for v in freqs .values () if v == 1 )
51
+ primitive_perimeter = 2 * euclid_m * (euclid_m + euclid_n )
52
+ for perimeter in range (primitive_perimeter , limit + 1 , primitive_perimeter ):
53
+ frequencies [ perimeter ] += 1
54
+ euclid_m += 1
55
+ return sum (1 for frequency in frequencies .values () if frequency == 1 )
50
56
51
57
52
58
if __name__ == "__main__" :
You can’t perform that action at this time.
0 commit comments