-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path069.py
46 lines (40 loc) · 1.55 KB
/
069.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
"""
Project Euler Problem 69
========================
Euler's Totient function, f(n) [sometimes called the phi function], is
used to determine the number of numbers less than n which are relatively
prime to n. For example, as 1, 2, 4, 5, 7, and 8, are all less than nine
and relatively prime to nine, f(9)=6.
+------------------------------------------+
| n | Relatively Prime | f(n) | n/f(n) |
|----+------------------+------+-----------|
| 2 | 1 | 1 | 2 |
|----+------------------+------+-----------|
| 3 | 1,2 | 2 | 1.5 |
|----+------------------+------+-----------|
| 4 | 1,3 | 2 | 2 |
|----+------------------+------+-----------|
| 5 | 1,2,3,4 | 4 | 1.25 |
|----+------------------+------+-----------|
| 6 | 1,5 | 2 | 3 |
|----+------------------+------+-----------|
| 7 | 1,2,3,4,5,6 | 6 | 1.1666... |
|----+------------------+------+-----------|
| 8 | 1,3,5,7 | 4 | 2 |
|----+------------------+------+-----------|
| 9 | 1,2,4,5,7,8 | 6 | 1.5 |
|----+------------------+------+-----------|
| 10 | 1,3,7,9 | 4 | 2.5 |
+------------------------------------------+
It can be seen that n=6 produces a maximum n/f(n) for n 10.
Find the value of n 1,000,000 for which n/f(n) is a maximum.
"""
from utils import totientrange
import itertools as it
print(
max(
enumerate(totientrange(2, 1000001)),
key=lambda enum_tuple: (enum_tuple[0] + 2) / enum_tuple[1],
)[0]
+ 2
)