NO_41 Pandigital prime

题目:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值