我們先來考慮幾個小問題作為鋪墊,給定一個數字,判斷這個數字是不是為質數。
輸入:
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
解題思路:
- 像第二個小問題一樣,先求出小于該偶數的所有素數集合清單。
- 再從清單中選去兩個內插補點最小的素數輸出
- 第一個輸出的素數應該小于第二個輸出的素數。
代碼如下:
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)