让我们定义 dn 为:dn = pn+1 - pn ,其中 pi 是第i个素数。显然有 d1 =1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105 ),请计算不超过N的满足猜想的素数对的个数。
每个测试输入包含1个测试用例,给出正整数N。
每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
20
4
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/8/10 17:58 # @Author : suxiaorui num = input() num = int(num) prime_list = [] # 双重循环寻找不超过num的素数添加到列表里 for i in range(2,num+1): for j in range(2,int(pow(i,0.5))+1): if i % j == 0: break else: prime_list.append(i) sum = 0 # 遍历素数列表寻找符合相邻相差为1的素数对。 for i in range(0,len(prime_list)-1): if prime_list[i+1] - prime_list[i] == 2: sum = sum + 1 print(sum)
from math import sqrt def is_prime(n): """"判断所给数据是否为素数""" for num in range(2, int(sqrt(n))+1): if n % num == 0: return False return True def prime_list(n): """输出不大于所给数据内的所有素数""" lst = [2] for i in range(3, n+1, 2): if is_prime(i) == 1: lst.append(i) return lst def count_num(lst): """"计算所给列表中有多少对相差为二的数对""" count = 0 for i in range(len(lst)): if (lst[i] - lst[i-1]) == 2: count += 1 return count n = int(input()) prime_lst = prime_list(n) print(count_num(prime_lst))注意题目中的“不超过N”,是小于等于N