天天看點

60---查找組成一個偶數最接近的兩個素數

我們先來考慮幾個小問題作為鋪墊,給定一個數字,判斷這個數字是不是為質數。

輸入:

3      

輸出

3      

代碼如下:

num = 3
if num <= 1:
    print(f"{num} 不是質數")
else:
    for i in range(2, num):
        if num % i == 0:
            print(f"{num} 不是質數")
            break

    else:
        print(f"{num} 是質數")
"""
3 是質數
"""      

這裡我們用到了​

​for-else​

​循環體結構,非常友善。

進一步我們再考慮一個小問題,給定一個值,求出小于該值的所有素數。

輸入:

20      

輸出:

2,3,5,7,11,13,17,19      

代碼如下:

number = 20
list1 = []
for num in range(number + 1):
    if num <= 1:
        continue
    else:
        for i in range(2, num):
            if num % i == 0:
                break

        else:
            list1.append(num)

print(list1)
"""
[2, 3, 5, 7, 11, 13, 17, 19]
"""      

接下來我們進入正題,查找組成一個偶數最接近的兩個素數。

描述

任意一個偶數(大于2)都可以由2個素數組成,組成偶數的2個素數有很多種情況,本題目要求輸出組成指定偶數的兩個素數內插補點最小的素數對。

資料範圍:輸入的資料滿足

輸入描述:

輸入一個大于2的偶數

輸出描述:

從小到大輸出兩個素數

示例1

輸入:

20      

輸出:

7
13      

示例2

輸入:

4      

輸出:

2
2      

解題思路:

  1. 像第二個小問題一樣,先求出小于該偶數的所有素數集合清單。
  2. 再從清單中選去兩個內插補點最小的素數輸出
  3. 第一個輸出的素數應該小于第二個輸出的素數。

代碼如下:

number = 20
list1 = []
for num in range(number + 1):
    if num <= 1:
        continue
    else:
        for i in range(2, num):
            if num % i == 0:
                break

        else:
            list1.append(num)

big = 0
small = 0
min1 = 100
for i in list1:
    for j in list1:
        if i + j == number and j >= i and j - i < min1:
            small = i
            big = j

print(small)
print(big)