diff --git a/project_euler/problem_073/sol2.py b/project_euler/problem_073/sol2.py new file mode 100644 index 000000000000..2272c48ba0dc --- /dev/null +++ b/project_euler/problem_073/sol2.py @@ -0,0 +1,48 @@ +""" +Project Euler Problem 73: https://projecteuler.net/problem=73 + +Consider the fraction, n/d, where n and d are positive integers. +If n<d and HCF(n,d)=1, it is called a reduced proper fraction. + +If we list the set of reduced proper fractions for d ≤ 8 in ascending order of size, +we get: + +1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, 4/7, 3/5, 5/8, 2/3, +5/7, 3/4, 4/5, 5/6, 6/7, 7/8 + +It can be seen that there are 3 fractions between 1/3 and 1/2. + +How many fractions lie between 1/3 and 1/2 in the sorted set +of reduced proper fractions for d ≤ 12,000? +""" + + +def solution(limit: int = 12_000) -> int: + """ + Returns number of fractions lie between 1/3 and 1/2 in the sorted set + of reduced proper fractions for d ≤ max_d + + >>> solution(4) + 0 + + >>> solution(5) + 1 + + >>> solution(8) + 3 + """ + phi = list(range(limit + 1)) + count = 0 + + for d in range(2, limit + 1): + if phi[d] == d: + for j in range(d, limit + 1, d): + phi[j] -= phi[j] // d + + count += phi[d] // 2 - phi[(d + 2) // 3] + + return count + + +if __name__ == "__main__": + print(f"{solution() = }")