Python 每日一题:锻炼Python语法的运用,思维逻辑的锻炼,算法能力的培养。
题目:
哥德巴赫猜想:任何一个6以上的偶数都可以分解为2个素数的和,俗称:1+1=2,例如:6=3+3,8=3+5,10=5+5,12=5+7,...
分析:
此问题在于:找到一个小于偶数 n 的素数 p ,并且要满足:q = n - p 也是素数, 即:n 可以分解为 p 与 n-p 两个素数之和。
程序解释:n = p + q,假设 p <= n / 2,设置maxp=n//2,构建 p=1,3,5,...,maxp 的循环,判断 p 是否为素数。如果p不是素数,将 p =p+2换下一个 p 在继续,如果 p 是素数,并判断 q = n - p 是否是素数,如果不是则继续 p = p + 2 的下一个 p 测试,如果 q 也是素数,找一个 分解 n = p + q,其中 p,q 都是素数。
一个偶数分解为两个素数的和分解不是唯一的;例如: 24=5+19,24=17+7 。
程序实现:
def even(num):
'''
判断数是否符合要求:是偶数且大于等于6
:param num: 需要判断的数
:return: 符合返回该数
'''
if num % 2 == 0 and num >= 6:
return num
def isprime(num):
'''
判断传入的数是否为素数
:param num: 判断的数
:return: 是素数则返回True,否则返回False
'''
if num > 2:
for x in range(2, num // 2 + 1):
if num % x == 0:
return False
else:
return True
return False
def ge_de_ba_he(n):
if even(n):
print(f'{n} = ', end='')
for p in range(1, n // 2 + 1):
if isprime(p) and isprime(n - p):
print(f"{p} + {n - p}")
break
else:
print('您传入的不是偶数')
ge_de_ba_he(14)
ge_de_ba_he(24)
ge_de_ba_he(32)
ge_de_ba_he(17)
实现结果:
14 = 3 + 11
24 = 5 + 19
32 = 3 + 29
您传入的不是偶数
【结语】以上整个程序的实现逻辑,还存在很多不全面的地方,欢迎各位大佬指点;如果觉得笔者不易,请给予点赞,给予我记录更多文章的动力!!