From d8f5b31fab57cc009e87a8d62c8d03075f66e9bd Mon Sep 17 00:00:00 2001 From: fpringle Date: Fri, 16 Oct 2020 11:42:51 +0200 Subject: [PATCH] Add solution for Project Euler problem 72 (#3122) * Added solution for Project Euler problem 72. * Update type annotations and 0-padding of the directory name. Reference: #3256 * Rename sol1.py to sol2.py * Added newline at the end of sol2.py * Revert sol1.py --- project_euler/problem_072/sol2.py | 45 +++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 project_euler/problem_072/sol2.py diff --git a/project_euler/problem_072/sol2.py b/project_euler/problem_072/sol2.py new file mode 100644 index 0000000..08e92c1 --- /dev/null +++ b/project_euler/problem_072/sol2.py @@ -0,0 +1,45 @@ +""" +Project Euler Problem 72: https://projecteuler.net/problem=72 + +Consider the fraction, n/d, where n and d are positive integers. If n int: + """ + Return the number of reduced proper fractions with denominator less than limit. + >>> solution(8) + 21 + >>> solution(1000) + 304191 + """ + primes = set(range(3, limit, 2)) + primes.add(2) + for p in range(3, limit, 2): + if p not in primes: + continue + primes.difference_update(set(range(p * p, limit, p))) + + phi = [float(n) for n in range(limit + 1)] + + for p in primes: + for n in range(p, limit + 1, p): + phi[n] *= 1 - 1 / p + + return int(sum(phi[2:])) + + +if __name__ == "__main__": + print(f"{solution() = }") -- GitLab