问题描述
差为2的两个素数被称为孪生素数对,例如3和5, 11和13.
给定一个区间,请输出区间内所有的孪生素数对.
输入格式
两个正整数a,b,其中a<b,
输出格式
区间[a,b]内的所有孪生素数对,按从小到大顺序。每行一个素数对,其中小的在前,大的在后,以空格分开。
如果区间内没有素数对的话,输出-1.以空格分开
思路:孪生素数是指若a为素数,且a+2也是素数,则素数a和a+2称为孪生素数。先判断n是否为素数,再判断n+2是否为素数,如果n和n+2同时为素数,则(n,n+2)就是一对孪生素数,将其打印输出即可。
a, b = map(int, input().split())
s = []
z=[]
for n in range(a, b + 1):
for i in range(2, n):
if n % i == 0:
break
else: # 注意这里在循环里面的缩进
if n != 1: # 避免a=1时把1也加入列表
s.append(n)
for i in s:
if i + 2 in s:
print(i,i+2)
if i+2 not in s:
z.append(i)
if s==z:
print(-1)
但是用for循环到后面大数会运行会超时,以后会了再来改善。