任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。
实现:1.判断是否为素数 2. 找到小于指定偶数的所有素数 3.找到差值最小的素数对
import sys
def is_primary(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
def find_primes_up_to(n):
"""生成小于等于 n 的所有素数"""
primes = []
for i in range(2, n + 1):
if is_primary(i):
primes.append(i)
return primes
def find_closest_prime_pair(even_number):
if even_number <= 2 or even_number % 2 != 0:
return None # 输入必须是大于 2 的偶数
primes = find_primes_up_to(even_number)
left, right = 0, len(primes) - 1
closest_pair = None
while left <= right:
p1, p2 = primes[left], primes[right]
current_sum = p1 + p2
if current_sum == even_number:
if closest_pair is None or abs(p1 - p2) < abs(closest_pair[0] - closest_pair[1]):
closest_pair = (p1, p2)
right -= 1
elif current_sum < even_number:
left += 1
else:
right -= 1
return closest_pair
for line in sys.stdin:
a = line.split()
b = int(a[0])
result = find_closest_prime_pair(b)
for r in result:
print(r)
395

被折叠的 条评论
为什么被折叠?



