forked from TheAlgorithms/Python
-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add solution for Project Euler problem 72 (TheAlgorithms#3122)
* Added solution for Project Euler problem 72. * Update type annotations and 0-padding of the directory name. Reference: TheAlgorithms#3256 * Rename sol1.py to sol2.py * Added newline at the end of sol2.py * Revert sol1.py
- Loading branch information
Showing
1 changed file
with
45 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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<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 21 elements in this set. | ||
How many elements would be contained in the set of reduced proper fractions | ||
for d ≤ 1,000,000? | ||
""" | ||
|
||
|
||
def solution(limit: int = 1000000) -> 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() = }") |