-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathp069.py
More file actions
62 lines (53 loc) · 1.23 KB
/
Copy pathp069.py
File metadata and controls
62 lines (53 loc) · 1.23 KB
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from euler import sieve_eratosthenes
primes = []
def euler_totient(n):
prime_factors = []
# if n is primes - n-1 relatively primes before it
if n in primes:
return n-1
for p in primes:
if p > n:
break
elif n%p == 0:
prime_factors.append(p)
phi = n
for p in prime_factors:
phi = (phi*(p-1))//p
return phi
def sieve_totient(n):
lim = n
phi = [i for i in range(n+1)]
is_prime = [True]*(n+1)
for i in range(2, lim+1):
if is_prime[i]:
phi[i] = i-1
for j in range(2*i, lim+1, i):
is_prime[j] = False
phi[j] = (phi[j]*(i-1))//i
return phi
def main():
lim = 10**6
global primes
primes = sieve_eratosthenes(lim)
val = 0
res = 1
for n in range(2, lim+1):
print(n)
tmp = n / euler_totient(n)
if tmp > val:
val = tmp
res = n
print('Ans: %d' % res)
def solve():
lim = 10**6
phi = sieve_totient(lim)
val = 0
res = 1
for n in range(2, lim+1):
tmp = n / phi[n]
if tmp > val:
val = tmp
res = n
print('Ans: %d' % res)
if __name__ == '__main__':
solve()