找出素数对
Tips:素数对
素数对是指两个相差为2的素数,例如5和7,17和19等。
一个正整数n内的所有素数对可以用下面的Python代码找到:
def prime_pairs(n):
result = []
for i in range(2, n+1):
if is_prime(i) and is_prime(i-2):
result.append((i-2, i))
return result
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5)+1):
if num % i == 0:
return False
return True
题目
任意输入一个大于10的偶数,编程找出所有和等于该偶数的素数对
以下程序实现了这一功能,请你填补空白处内容:
h = 0
def a(h):
x = 0
for j in range(2, h):
if h % j == 0:
x = 1
break
if x == 0:
return 1
n = int(input("输入任意大于10的偶数:"))
for i in range(n,n+1):
h = 0
if i % 2 == 0:
for k in range(2, i):
if a(k) == 1 and a(i - k) == 1:
________________;
解题思路:
。首先,判断输入是否为偶数,;其次,按顺序寻找小于该偶数的每个素数,并与该偶数相减,得到另外一个素数,打印输出。
A
输出:
100 can't
100 can't
100 can't
100 can't
100 can't
。。。。。。
h = 0
def a(h):
x = 0
for j in range(2, h):
if h % j == 0:
x = 1
break
if x == 0:
return 1
n = int(input("输入任意大于10的偶数:"))
for i in range(n,n+1):
h = 0
if i % 2 == 0:
for k in range(2, i):
if a(k) == 1 and a(i - k) == 1:
h = 1
#不存在时h=0
if h == 1:
print("%d can't" % i)
#break
continue
else:
print("%d=%d+%d" % (i, k, i - k))
#break
continue
B
当存在时输出正确,但对不存在时的判断逻辑有误,应break
h = 0
def a(h):
x = 0
for j in range(2, h):
if h % j == 0:
x = 1
break
if x == 0:
return 1
n = int(input("输入任意大于10的偶数:"))
for i in range(n,n+1):
h = 0
if i % 2 == 0:
for k in range(2, i):
if a(k) == 1 and a(i - k) == 1:
h = 1
if h == 0:
print("%d can't" % i)
#应为:break
continue
else:
print("%d=%d+%d" % (i, k, i - k))
continue
C ,选项解答
h=1时的执行条件有误,break修改为continue
h = 0
def a(h):
x = 0
for j in range(2, h):
if h % j == 0:
x = 1
break
if x == 0:
return 1
n = int(input("输入任意大于10的偶数:"))
for i in range(n,n+1):
h = 0
if i % 2 == 0:
for k in range(2, i):
if a(k) == 1 and a(i - k) == 1:
h = 1
if h == 0:
print("%d can't" % i)
break
else:
print("%d=%d+%d" % (i, k, i - k))
continue
D
h = 0
def a(h):
x = 0
for j in range(2, h):
if h % j == 0:
x = 1
break
if x == 0:
return 1
n = int(input("输入任意大于10的偶数:"))
for i in range(n,n+1):
h = 0
if i % 2 == 0:
for k in range(2, i):
if a(k) == 1 and a(i - k) == 1:
h = 1
#不存在时h=0
if h == 1:
print("%d can't" % i)
break
else:
print("%d=%d+%d" % (i, k, i - k))
break
改进算法:
from math import sqrt
def a(n):
if n <= 1:
return False
for i in range(2, int(sqrt(n) + 1)):
if n % i == 0:
return False
return True
n = int(input("输入任意大于10的偶数:"))
if n % 2 == 1:
print("%d not a even number." % n)
elif n % 2 == 0:
for k in range(2, n):
if a(k) == 1 and a(n - k) == 1:
print("%d=%d+%d" % (n, k, n - k))
PS:素数的判断方法(转载)
https://blog.csdn.net/weixin_53501217/article/details/111159621