因此,正如标题中所述,我正在尝试生成所有10位素数的列表,它们连续有7x7。更确切地说,我的意思是可以写成如下数字:xxx7777777,xx7777777x,x7777777xx,7777777xxx。
我的想法是生成所有这些数字的列表,然后检查其中一个是质数。代码如下:
importtimedefGeneratingTable():A=[]foriinrange(1,10):forjinrange(0,10):forkinrange(0,10):A.append(i*1000000000+j*100000000+k*10000000+7777777)foriinrange(1,10):forjinrange(0,10):forkinrange(1,10):A.append(i*1000000000+j*100000000+77777770+k)foriinrange(1,10):forjinrange(0,10):forkinrange(1,10):A.append(i*1000000000+777777700+10*j+k)foriinrange(0,10):forjinrange(0,10):forkinrange(1,10):A.append(7777777000+i*100+j*10+k)A=list(set(A))# I want to get rid of duplicats hereprint(len(A))returnAdefifPrime(n):# Maybe I can use more efficient algorithm?Prime=1i=2whilei*i<=n:ifn%i==0:Prime=0breaki+=2ifPrime==1:return1else:return0defHowMany():counter=0A=GeneratingTable()foriinrange(len(A)):ififPrime(A[i]):print(A[i])counter+=1returncounter
start=time.clock()print(HowMany())end=time.clock()time=end-startprint(time)
我确定我通过这种方式得到的质数很高-它是2115,列表A中的元素数是3159。我的函数“ GeneratingTable”还是检查该数是否为质数是问题吗?
解决方案
您的质数函数是错误的,应将其增加i1,而不是2,否则您缺少一些质数。
然后,您应该set在生成表时直接添加到a而不是创建列表,这样可以节省内存和CPU时间(也正如Chris所评论的那样,您正在执行从0或1