题目:素数对猜想
让我们定义 dn 为:dn = p{n+1} - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
一、思考过程:
1.判断1到给定的数N中有多少个素数。
(1)得知道素数的判定方法。
素数,即质数。只能被它本身和1整除的数为素数
例如数字1,11只能被它本身和1整除,所以11是素数。
例如数字9,9除了能被它本身和1整除之外,还能被3整除,所以数字9不是素数。
在所有的素数中,最小的素数为2。
(2)求出给定数N范围内有多少个素数
例如:给定N = 20;
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
素数有2, 3, 5, 7, 11, 13, 17, 19
2.将素数存放到数组中。
array[MAX] = { 2, 3, 5, 7, 11, 13, 17, 19};
3.判断数组中相邻且差为2的素数对,记录有多少个。
从数组中可以得出:
5 - 3 = 2
7 - 5 = 2
13 - 11 = 2
19 - 17 = 2
所以可以得出素数对:
[3 , 5], [5 , 7], [11 , 13], [17 , 19]
共4个素数对
二、解题方法
使用枚举法
项目包含一个头文件function.h和main.cpp
function.h包含两个函数:判断素数的函数isPrime(),执行操作的函数function()
main.cpp调用function.h中执行操作的函数function()
枚举过程:
通过数组一个一个的计算相邻素数对的差值为2的个数。
在function()函数中先调用isPrime(),判断给的数是否为素数,是素数就将它放入一个数组中,再进行array[i + 1] - array[i] == 2判断,最后记录个数即可。