天天看點

2021-08-27:驗證哥德巴赫猜想之一: 2000以内的正偶數(大于等于4)都能夠分解為兩個質數之和。

驗證哥德巴赫猜想之一:

2000以内的正偶數(大于等于4)都能夠分解為兩個質數之和。(每個偶數表達成形如: 4=2+2 的形式)

# -*- coding: utf-8 -*-
"""
Created on Thu Aug 26 21:11:46 2021
敲下世界隻為她!
PRACTICE MAKES PERFECTS.
@author: leeandcao
"""
'''
8.1驗證哥德巴赫猜想之一: 2000以内的正偶數(大于等于4)都能夠分解為兩個質數之和。每個偶數表達成形如: 4=2+2 的形式。
'''
import math
def prime(x):           # 2,3是素數
    '''素數(質數)判斷自定義程式'''
    if x == 1:
        return False    #輸入的數是1 傳回值是錯誤
    n = int(math.sqrt(x))   #最短區間
    for i in range(2,n+1):
        if x % i == 0:   # 餘數是0就是有能被整除的數
            return False
    return True
 
# 輸入1、2、3進步入循環;輸入4臨界值;輸入5,break直接結束循環;輸入6,3所管的邊界;輸入7,怎麼了解呢?;輸入8,素數不過
def GC(n): 
    k = 3   # 大于等于4的正偶數,能分解為兩個質數之和
    while k < n:    # 如果這個數大于3為真,強調了第一個應該為4的正整數
        t = n-k     # t是什麼?輸入數與k的內插補點,就是把這個數平移三個數,輸入4,t=1
        if t < k:   # 如果這個內插補點小于3,直接跳出循環,輸入5內插補點為2,輸入6內插補點為3不滿足條件
            break
        if prime(k) and prime(t): # 由于prime(k)未曾改變其中的值,是以一直為真 隻有prime的值為真才執行
            return k,t  # 為什麼判斷兩個都是質數要傳回k和t呢?k值意味着什麼呢,兩個質數分解怎樣分解
        k += 2      # k= 3,5,7,9...奇數  
  
n = int(input('Enter a number :'))
if n > 4:
    a,b = GC(n)
    print('{}={}+{}'.format(n, a, b)) # a 乃變化的k值 ,b 是n,a之差。
elif n == 4:
    print('{}={}+{}'.format(2, 2, 2))