题目:
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?
代码为:__author__ = 'Administrator'
import re
import itertools
import string
import math
import time
t=time.time()
def isprime(n):
if n==2:
return True
else:
if n%2==0:
return False
for div in range(3,int(math.sqrt(n)+1),2):
if not n%div:
return False
return True
def func(sourcelist):
if not sourcelist:
return None
sortedlist=list(itertools.permutations(sourcelist))
numlist=[int(''.join(inlist)) for inlist in sortedlist]
numlist.sort(reverse=True)
maxprime=0
for x in numlist:
if isprime(x):
maxprime=x
break
if maxprime==0:
maxprime=func(sourcelist[:-2])
return maxprime
sourcelist=list('123456789')
print func(sourcelist)
print time.time()-t
运行结果为:
7652413
20.503000021
缺点为:
太慢了,运行速度太慢了。
但是我觉得我应该没有可以再减少的了吧。。
看下别人的代码吧。
别人的思路:
1+2+。。+9=45 能被3 整除
1+2+。。+8=36也能被3整除
所以
sourcelist=list('1234567')
所以运行的结果为:
7652413
0.00399994850159