哥德巴赫 1742 年给欧拉的信中哥德巴赫提出了以下猜想:任一大于 2 的偶数都可写成两个质数之和。但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮忙证明,但是一直到死,欧拉也无法证明。因现今数学界已经不使用“1 也是质数”这个约定,原初猜想的现代陈述为:任一大于 5 的偶数都可写成两个质数之和。
功能拆解成几个小程序:
- 用户输入值的判断:当值为数字是返回True,否则返回False
- 奇数、偶数判断:当值为偶数时返回True,否则返回False
- 质数的判断:质数是数学上的定义,指的是只能被1和它本身整除的数字。通过遍历整除的结果即可判断。
1 def isEven( num ):
2 #判断是否是偶数
3 if num % 2 == 0:
4 return True
5 else:
6 return False
7
8 def isPrime( num ):
9 #判断是否是质数
10 from math import sqrt
11 if num == 0 or num == 1:
12 flag = False
13 elif num == 2:
14 flag = True
15
16 else:
17 for i in range(2, num):
18 if num % i == 0:
19 flag = False
20 break
21 else:
22 flag = True
23 return flag
24
25 def isNum( string ):
26 #判断是否是数值
27 if string.isdigit():
28 return True
29 else:
30 return False
核心的功能已经完成函数化后,组合这些函数完成编程的目标:输入任意一个大于5的偶数,证明这个偶数符合哥德巴赫猜想,并显示是哪两个质数。
1 respone = input('请输入一个大于5的偶数:')
2 if isNum(respone): #判断输入是否为整数
3 respone = int(respone) #判断是否是大于5的偶数
4 if (respone > 5) and isEven(respone):
5 #进行猜想判断
6 i_list = []
7 for i in range(1,respone):
8 j = respone - i #分解为两个数字
9 if isPrime(i) and isPrime(j):
10 i_list.append(i) #记录已显示的数字
11 if j in i_list:
12 pass
13 else:
14 print( '{0} = {1} + {2}'.format(respone, i, j))
15 else:
16 print('输入错误!')
17 else:
18 print('输入错误!')
显示结果: