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)