Initial commit
This commit is contained in:
57
src/task69 - Totient maximum.py
Normal file
57
src/task69 - Totient maximum.py
Normal file
@@ -0,0 +1,57 @@
|
||||
import math
|
||||
|
||||
def is_prime(n):
|
||||
if n == 2 or n == 3: return True
|
||||
if n < 2 or n%2 == 0: return False
|
||||
if n < 9: return True
|
||||
if n%3 == 0: return False
|
||||
r = int(n**0.5)
|
||||
f = 5
|
||||
while f <= r:
|
||||
if n%f == 0: return False
|
||||
if n%(f+2) == 0: return False
|
||||
f +=6
|
||||
return True
|
||||
|
||||
def tot(n):
|
||||
if is_prime(n):
|
||||
return n-1
|
||||
else:
|
||||
return len([i for i in range(1,n) if math.gcd(i,n)==1])
|
||||
|
||||
def phi(n) :
|
||||
|
||||
result = n # Initialize result as n
|
||||
|
||||
# Consider all prime factors
|
||||
# of n and for every prime
|
||||
# factor p, multiply result with (1 - 1 / p)
|
||||
p = 2
|
||||
while(p * p<= n) :
|
||||
|
||||
# Check if p is a prime factor.
|
||||
if (n % p == 0) :
|
||||
|
||||
# If yes, then update n and result
|
||||
while (n % p == 0) :
|
||||
n = n // p
|
||||
result = result * (1.0 - (1.0 / (float) (p)))
|
||||
p = p + 1
|
||||
|
||||
|
||||
# If n has a prime factor
|
||||
# greater than sqrt(n)
|
||||
# (There can be at-most one
|
||||
# such prime factor)
|
||||
if (n > 1) :
|
||||
result = result * (1.0 - (1.0 / (float)(n)))
|
||||
|
||||
return (int)(result)
|
||||
|
||||
max = [0,0]
|
||||
for n in range(2,1000001):
|
||||
totn = phi(n)
|
||||
if n/totn > max[1]:
|
||||
max = [n, n/totn]
|
||||
|
||||
print(max)
|
Reference in New Issue
Block a user