Project Euler 41

プロジェクトオイラー
http://projecteuler.net/index.php

Q41.
1からnまでの数字を一つずつ使った整数のうち最大の素数

n = 8, 9なら必ず3で割り切れるから、7でやってみる。



from itertools import permutations

def is_prime(n):
if n == 1:
return False
elif n == 2:
return True
elif (n & 1) == 0:
return False

p = 3
while p * p <= n:
if n % p == 0:
return False
p += 2
return True

def unresolve(a):
n = 0
for i in a:
n = n * 10 + i
return n

for a in permutations(range(7, 0, -1)):
n = unresolve(a)
if is_prime(n):
print n
break