def solve(N): for x in count(1): all_permuted = True for n in [i*x for i in range(2, N+1)]: if not is_permuted(n, x): all_permuted = False break if all_permuted: return x
def solve(N): primes = sieve_eratosthenes(lsqrt(N)*2) print_sieve_stats(primes) min_frac = N min_number = N for step in range(1, 500): for (p, q) in [(primes[i], primes[i-step]) for i in range(len(primes)-1, step-1, -1)]: for (p_power, q_power) in zip(powers_below(p, N), powers_below(q, N)): n = p_power*q_power if n > N: continue phi = (p_power - p_power/p)*(q_power - q_power/q) if permutation.is_permuted(n, phi): frac = float(n)/phi if frac < min_frac: print(n, p, q, phi, frac, step) min_frac = frac min_number = n return min_number