NO_41 Pandigital prime

来源:互联网 发布:电视虚拟鼠标软件 编辑:程序博客网 时间:2024/06/05 20:22

题目:

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 reimport itertoolsimport stringimport mathimport timet=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 Truedef 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 maxprimesourcelist=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

0 0
原创粉丝点击