天天看点

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)