哥德巴赫猜想:大于8的偶数之和都可以被两个素数相加
范围 8 - 10000
思路:
首先不要去管需要什么什么东西实现,所以我们如果知道如何去完成:
大于8的偶数之和都可以被两个素数相加:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 可以假设 这个猜想是正确的。
# 设一个变量是true
flag = True
# 确定范围 8 - 10000
for fanwei in range ( 8 , 10000 , 2 ):
# 如果猜想错误如何?
if not caixiang(fanwei):
flag = False
# 正确又如何错误又如何?
if flag = True :
print ( '猜想正确' )
else :
print ( '猜想错误' )
|
之后我们去写一个函数 来确定这个猜想是否正确,正确就返回 True
1
2
3
4
5
6
7
|
def caixiang(n):
# 这里需要所有的素数 8 - 10000的
# 这里的目的是为了拆分出两素数参数n 和 循环名 m 两个变量
for m in range ( 1 ,n / / 2 + 1 ):
if sushu(m) and sushu(n - m):
return True
return False
|
最后发现还要判断是否是素数:
1
2
3
4
5
6
7
|
def sushu(n):
su = 0
for i in range ( 1 ,n - 1 ):
c = n % i
if c = = 0 :
su + = 1
return True
|
这样这个哥德巴赫猜想就完成了。
思路扩展:
思路:
可以定义两个函数,一个判断是否为素数,一个分解。利用前面的两个函数生成n范围内的素数列表。如果两层for循环中的两个迭代变量之和等于参数n,就将这两个变量加入列表中,循环完所有的情况后返回列表,并打印输出。
参考代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import math
def isprime(n): #判断素数
if n = = 1 :
return False
elif n = = 2 :
return True
else :
for i in range ( 2 , int (math.sqrt(n) + 1 )):
if n % i = = 0 :
return False
return True
def thonsand(n) : #生成若干个素数,返回素数list
a = []
for i in range ( 1 ,n + 1 ):
if isprime(i):
a.append(i)
return a
"""利用前面的两个函数生成n范围内的素数列表
两层for循环,两个迭代变量之和如果等于参数n就加入列表中
循环完所有的情况后返回列表,并打印输出。
"""
def gdbh(n):
a = []
ls = thonsand(n)
for i in ls:
for j in ls:
if n = = i + j:
a.append(i)
a.append(j)
return a
ls2 = gdbh( 12 )
ls3 = gdbh( 152 )
print (ls2)
print (ls3)
|
两个测试数据 12,152
输出如下;
[5, 7, 7, 5]
[3, 149, 13, 139, 43, 109, 73, 79, 79, 73, 109, 43, 139, 13, 149, 3]
到此这篇关于Python用函数思想完成哥德巴赫猜想代码分析的文章就介绍到这了,更多相关Python实现哥德巴赫猜想内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.cnblogs.com/dpdd/p/14851936.html