4190: 欧拉筛法
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:1
解决:1
题目描述
埃氏筛法的基础上,让每个合数只被它的最小质因子筛选一次,以达到不重复的目的。如:30=2*3*5,使用埃氏筛法会被2的倍数时标记一次,3的倍数时标记一次,5的倍数时标记一次,造成效率达不到最优,而欧拉筛法改进这个不足。
给定一个大于2的偶数,在所有满足“任意一个大于2的偶数可以由两个质数相加得到”这个特点的质数对中,找出两个质数差值最小的一对,并将差值输出(差值为大数减小数的值,两个质数相等时差值为0)。
例如:偶数16,满足特点的质数对有(5,11)和(3,13),差值最小的一对是(5,11),11减5,差值为6
样例输入 复制
16
样例输出 复制
6
提示
n=int(input()) a=[1]*(n+1) #全部初始化为素数 ls=[] #存放已筛选的素数 for i in range(2,n+1): if a[i]==1: ls.append(i) for prime in ls: if i*prime>n:break a[i*prime] = 0 if i%prime == 0:break for i in range(n//2,n+1): if i in ls and n-i in ls: print(i+i-n) break