Skip to content

Commit e835e96

Browse files
Improve Project Euler problem 014 solution 1 (TheAlgorithms#5747)
* Improve solution * Uncomment code that has been commented due to slow execution affecting Travis * Fix
1 parent b6eb448 commit e835e96

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

project_euler/problem_014/sol1.py

+14-8
Original file line numberDiff line numberDiff line change
@@ -25,31 +25,37 @@ def solution(n: int = 1000000) -> int:
2525
n → n/2 (n is even)
2626
n → 3n + 1 (n is odd)
2727
28-
# The code below has been commented due to slow execution affecting Travis.
29-
# >>> solution(1000000)
30-
# 837799
28+
>>> solution(1000000)
29+
837799
3130
>>> solution(200)
3231
171
3332
>>> solution(5000)
3433
3711
3534
>>> solution(15000)
3635
13255
3736
"""
38-
largest_number = 0
39-
pre_counter = 0
37+
largest_number = 1
38+
pre_counter = 1
39+
counters = {1: 1}
4040

41-
for input1 in range(n):
42-
counter = 1
41+
for input1 in range(2, n):
42+
counter = 0
4343
number = input1
4444

45-
while number > 1:
45+
while True:
46+
if number in counters:
47+
counter += counters[number]
48+
break
4649
if number % 2 == 0:
4750
number //= 2
4851
counter += 1
4952
else:
5053
number = (3 * number) + 1
5154
counter += 1
5255

56+
if input1 not in counters:
57+
counters[input1] = counter
58+
5359
if counter > pre_counter:
5460
largest_number = input1
5561
pre_counter = counter

0 commit comments

Comments
 (0)