【发布时间】:2018-04-10 20:43:29
【问题描述】:
正如标题中所述,我正在尝试生成所有 10 位素数的列表,这些素数连续具有 7x7。更准确地说,我的意思是可以写成这样的数字:xxx7777777、xx7777777x、x7777777xx、7777777xxx。
我的想法是生成所有这些数字的列表,然后检查其中哪一个是素数。代码如下:
import time
def GeneratingTable():
A = []
for i in range (1,10):
for j in range (0,10):
for k in range (0,10):
A.append(i*1000000000+j*100000000+k*10000000+7777777)
for i in range (1,10):
for j in range (0,10):
for k in range (1,10):
A.append(i*1000000000+j*100000000+77777770+k)
for i in range (1,10):
for j in range (0,10):
for k in range (1,10):
A.append(i*1000000000+777777700+10*j+k)
for i in range (0,10):
for j in range (0,10):
for k in range (1,10):
A.append(7777777000+i*100+j*10+k)
A = list(set(A)) # I want to get rid of duplicats here
print(len(A))
return A
def ifPrime(n): # Maybe I can use more efficient algorithm?
Prime = 1
i = 2
while i * i <= n:
if n%i == 0:
Prime = 0
break
i += 2
if Prime == 1:
return 1
else:
return 0
def HowMany():
counter = 0
A = GeneratingTable()
for i in range (len(A)):
if ifPrime(A[i]):
print(A[i])
counter += 1
return counter
start = time.clock()
print(HowMany())
end = time.clock()
time = end - start
print(time)
我确定我以这种方式获得的素数数量很高 - 它是 2115,我的列表 A 中的元素数量是 3159。这是我的函数“GeneratingTable”的问题还是检查数字是否是素数?
【问题讨论】:
-
你也可以使用
for k in range (1,10,2)作为个位数跳过一堆。