本帖最后由 jackz007 于 2021-1-6 15:24 编辑 if i % j == 0 :
break
else:
lst.append(i)
break
一个数只算一次就能确定是素数?
一个数如果能找到因子,那就可以否定素数,而肯定素数必须是在枚举完所有可能的因子之后,也就是在循环完以后。 for k in range(2,p):
if p%k==0:
lst.remove(q)
continue
lst 中肯定只有一个 q,删除掉了还不 break 退出,却还 continue,意思是还要继续删除,如果 lst 中的某个素数恰好可以找到一个以上的因子,那 q 就得删除多次,你的错误就是因为这个原因造成。
下面是修改后的代码m = int(input())
n = int(input())
lst = []
for i in range(m , n + 1):
for j in range(2 , i):
if i % j == 0 :
break
else:
lst . append(i)
for q in lst[:]: # 【关键点】,由于 lst 可能会在循环中被改变,所以,一定要依据其副本来控制循环
p = int(str(q)[::-1])
for k in range(2 , p):
if p % k == 0 :
lst . remove(q)
break
if len(lst):
print('%d' % lst[0] , end = '')
for i in range(1 , len(lst)):
print(' %d' % lst[i] , end = '')
print()
else:
print("no exit")
下面是我写的代码,仅供楼主参考
def reverse(n):
r = 0
while n:
r = r * 10 + n % 10
n //= 10
return r
def prime(n):
r = False
if n > 1:
r , i = True , 2
while i * i < n + 1:
if i < n and n % i == 0 :
r = False
break
i += 1
return r
m , n , c = int(input()) , int(input()) , 0
for i in range(m , n + 1) :
if prime(i) and prime(reverse(i)):
if c :
print(' ' , end = '')
print(i , end = '')
c += 1
if c :
print()
else:
print("no exit")
|