所以我试图弄清楚如何找到2个数字之间的所有回文素数。 到目前为止,我的代码可以找到回文,但是当我检查素数时,它也打印出非素数。还有多次打印的数字。
你能帮忙吗?感谢。
a = 0
b = 500
a += 1
for i in range(a,b):
if(str(i) == str(i)[::-1]):
if(i>2):
for a in range(2,i):
y = True
if(i%a==0):
y = False
break
if y:
print(i)
答案 0 :(得分:2)
根据您最近的代码,您只需要确保为您测试的每个号码重置y
,这将作为素数的积极指标。否则,当你到达第一个复合数字4时,它将保持False
。
>>> a = 0
>>> b = 500
>>> a += 1
>>> for i in range(a,b):
y = True
if(str(i) == str(i)[::-1]):
if(i>2):
for a in range(2,i):
if(i%a==0):
y = False
break
if y:
print(i)
3
5
7
11
101
131
151
181
191
313
353
373
383
As you can see, all of these are prime.您可以查看wolframalpha提供的素数列表,以确保没有遗漏回文素数。如果你想要包含2,请为此添加一个特殊情况。
答案 1 :(得分:1)
请参阅下面的评论:
a = 0
b = 500
a += 1
y = True
for i in range(a,b):
if(str(i) == str(i)[::-1]):
print (i) # <--- You print every number that is a palindrome
if(i>2):
for a in range(2,i):
if(i%a==0):
y = False # <--- This never gets set back to True
break
if y:
print(i)
i+=i # <--- This is doing nothing useful, because it's a "for" loop
答案 2 :(得分:0)
看看下面的代码,我们也不需要初始化Y。 For-Else块效果很好。
a = 0
b = 500
a += 1
for i in range(a,b):
if(str(i) == str(i)[::-1]):
if(i>1):
for a in range(2,i):
if(i%a==0):
y = False
break
else:
print(i)
要在答案中包含2,只需确保将@elias提到的if条件检查为(i> 1)