我为哥德巴赫猜想编写了一个Python代码。问题是我的输出看起来像这样
Enter the lower limit: 8
Enter the Upper limit: 10
8 = 3 + 5
10 = 3 + 7
10 = 5 + 5
我希望我的输出看起来像这样
8 = 3 + 5
10 = 3 + 7 = 5 + 5
有什么办法可以将其格式化吗?
我只发布 for 循环:
for n in range (lo_limit, up_limit + 1): #lo_limit and up_limit is what you input
if (n % 2 == 0):
for a in range (1, n + 1):
if is_prime(a): #is_prime represent numbers that are prime
for b in range(1, n + 1):
if is_prime(b):
if (a + b == n):
if (a <= b):
print(n, "=", a, "+", b)
主函数
通过一些简单的更改,您的函数可以得到简化并加快速度:
def goldbach(lo, hi):
# 1. just step by 2 instead of checking for even numbers
for n in range(lo, hi + 1, 2):
# 2. keep a list of found matches instead of building up a string
matches = [str(n)]
# 3. for any 'a', you can just subtract to find 'b' instead of looping
# 4. instead of testing for a <= b, just run the 'a' loop halfway
for a in range(1, n // 2 + 1):
if is_prime(a) and is_prime(n-a):
matches.append('{} + {}'.format(a, n-a))
# 5. join up the matches and print at the end
print(' = '.join(matches))
为了更加简洁,整个内部 for 循环也可以表示为列表理解。
您可以通过预先生成范围内的素数列表,然后迭代这些素数并检查补集的成员资格,而不是重复进行素数测试,可以轻松地进一步优化这一点。
我是一名优秀的程序员,十分优秀!