Pandigital prime
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?
Answer:
7652413
Completed on Thu, 30 Jul 2015, 08:32
Go to the thread for problem 41 in the forum.
首先发现3k和3k-1位的ppandigital肯定能被3整除,所以就剩下1,4,7,10,13。。。猜测题意应该是9以内的所以就试试7咯,代码是前面代码扩展,就出结果了
http://blog.csdn.net/zhangzhengyi03539/article/details/43501225
http://blog.csdn.net/zhangzhengyi03539/article/details/47057049
__author__ = 'zhengyi'import mathfrom functools import reducedef IsPrime(x): if x==1: return False k=int(math.sqrt(x))+1 for i in range(2,k): if x%i==0: return False return Truedef reducefunc(x,y): return 10*x+ydef func1(x): i=1 val=1 while val<x: i+=1 val*=i if val==x: return (1,i,0) else: step=val//i k=x//step return (k,i-1,x%(k*step))def func2(x): lst=[] result=func1(x) while result[2]!=0: lst.append(result[0:2]) result=func1(result[2]) lst.append(result[0:2]) return lstdef func3(x,clst): result=[] count=len(clst) lst=func2(x) length=len(lst) for i in range(0,length): if i<length-1: delta=lst[i][0] position=lst[i][1]+1 while count>position: result.append(clst[-count]) del clst[-count] count-=1 result.append(clst[-position+delta]) del clst[-position+delta] count-=1 else: delta=lst[i][0]-1 position=lst[i][1]+1 while count>position: result.append(clst[-count]) del clst[-count] count-=1 result.append(clst[-position+delta]) del clst[-position+delta] count-=1 while count>0: result.append(clst[-1]) del clst[-1] count-=1 return resultcharlist=[i for i in range(7,0,-1)]k=0while True: k+=1 temp=func3(k,charlist.copy()) data=reduce(reducefunc,temp) if IsPrime(data): print(data) breakprint("Get it")
版权声明:本文为博主原创文章,未经博主允许不得转载。