[https://projecteuler.net/problem=41]
We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once. For example, 2143 is a 4-digit pandigital and is also prime.
What is the largest n-digit pandigital prime that exists?
def expmod(base, exp, m):
if exp == 0:
return 1
if (exp % 2 == 0):
return (expmod(base, exp // 2, m) ** 2 % m)
return (base * expmod(base, exp - 1, m) % m)
def expmod_naiv(base, exp, m):
return base ** exp % m
def fermat_test(n):
a = n - 3
return expmod(a, n, n) == a
assert(expmod(2, 100000, 2143) == expmod_naiv(2, 100000, 2143))
assert(fermat_test(2143))
import itertools
for pandigital in itertools.permutations("7654321"):
p = int("".join(pandigital))
if fermat_test(p):
s = p
break
print(s)
assert(s == 7652413)