哥德巴赫猜想
链接: link.
歌德巴赫猜想,是指对于每一个大于 4 的偶数n ,都能表示成两个质数之和。
现在,你需要写程序验证这一猜想。对于n ,找出质数a和b, 满足a+b=n, a<=b,且 a * b 最大。
例如n=8 ,满足条件的a和b分别为 3 和 5;
输入格式
每行一个偶数n(4<n<=20000)
输出格式
对应于每个输入的偶数,输出a 、一个空格、b、一个换行符
样例
#input
8
10
1000
#output
3 5
5 5
491 509
思路
- 判定一个数是否为质数,要用到math模块里的sqrt()-求开方根,对于给定的数n,如果i在2到(sqrt(n)+1)范围内有n % i == 0,那即是有除1和n本身以外别的因子,返回False。这里限定范围是避免重复。
- 对于l = m+n,m、n的乘积在二者最靠近l/2时最大,所以循环找乘积最大值时,可以从l/2到0逆序查找,如果出现m,n都为素数,则二者必然是满足条件的值。
python实现
import math
# 判断一个数是不是质数
def isPrimes(n):
if n == 1:
return True
for i in range(2,int(math.sqrt(n)+1)):
#从2开始判断是否有别的因子 有一个就为False
if n % i == 0:
return False
return True
def gedebahe(num):
mid = num // 2
col = []
for i in range(mid,0,-1):
if isPrimes(i) and isPrimes(num-i):
col.append((i,num - i))
return col[-1]
while True:
try:
num = int(input())
print(list(gedebahe(num))[0],list(gedebahe(num))[1],end='\n')
except:
break
仅记录刷题过程以及需要注意的知识点,方便自己复习。