4188: 差值最小质数对

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:2 解决:1

题目描述

    给定一个大于2的偶数,在所有满足“任意一个大于2的偶数可以由两个质数相加得到”这个特点的质数对中,找出两个质数差值最小的一对,并将差值输出(差值为大数减小数的值,两个质数相等时差值为0)。

    例如:偶数16,满足特点的质数对有(5,11)和(3,13),差值最小的一对是(5,11),11减5,差值为6。

输入

输入一个大于2的偶数n

输出

输出满足“任意一个大于2的偶数可以由两个质数相加得到”这个特点的所有质数对中,差值最小的那一对的差值

样例输入 复制

16

样例输出 复制

6

提示

编程思路:

1. 找出2到n之间所有质数,放到质数列表ls中;

2. 因为要找两个差值最小的一对质数,不难推断应该是离n中间最近的一对质数。所以,从n的一半开始往前找,如果这个数是质数而且n减去这个质数的差也在这个质数列表中,则其差值即为差值最小的那一对质数;

    如果使用以前学过的方法找2到n之间所有的质数,存在效率很低的问题,当n>=10000时,运行时间会超过10秒。我们需要找到一个更高效率的方法。

n=int(input())
ls=[]
for i in range(2,n+1):
    flag=True
    for j in range(2,i):
        if i % j==0:
            flag=False
            break
    if flag:
        ls.append(i)
for i in range(n//2,n+1): #中间往前找第1个质数
    if i in ls and n-i in ls:
        print(i+i-n)
        break