逼近法(注:这第一种是从两端逼近,不严谨,不见得两数绝对值最小,重点请看第二种)
def isPrime(n): #判断素数
if n==2 or n==3:
return True
elif n<2:
return False
else:
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
while True:
try:
n=int(input())
for i in range(2,n//2+1):#截断整数部分
if isPrime(i)and isPrime(n-i):#从两端开始逼近
a,b=i,n-i
print(a);print(b)
except:
break
下面这个方法是从中间往两边扩,可保证两数绝对值最小,且理论上应该更快些
def isPrime(n): #判断素数
if n==2 or n==3:
return True
elif n<2:
return False
else:
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
while True:
try:
num=int(input())
i=0;mid=num//2
while i<mid:
a,b=mid-i,mid+i
if isPrime(a) and isPrime(b):
print(a)
print(b)
break
else:
i+=1
except:
break

京公网安备 11010502036488号