文章目录
题目
让我们定义 d n d_n 为: d n = p n + 1 − p n d_n = p_{n+1} - p_n ,其中 p i p_i 是第 i i 个素数。显然有 d 1 = 1 d_1 = 1 ,且对于 n > 1 n>1 有 d n d_n 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为 2 2 的素数”。
输入格式
输入在一行给出正整数 N N 。
输出格式
在一行中输出不超过 N N 的满足猜想的素数对的个数。
输入样例
20
输出样例
4
其它要求
代码长度限制:16 KB 时间限制:400 ms 栈限制:8192 KB 内存限制:64 MB
题解
解题思路
根据题目要求,发现 5 5 之前的数字都不满足“素数对猜想”,因此循环从 5 5 开始,根据题目要求,需要判断 i i 本身是否为素数,且其前一个数字也为素数(因为从 5 5 以后,不可能出现两个连续的素数,因此直接判断 i i 和 i − 2 i-2 是否都为素数),如果二者都为素数,则 c o u t + + cout++ ,最后输出 c o u t cout 即可。
【素数】素数:又叫质数,指的是:大于 1 1 的整数中,只能被 1 1 和这个数本身整除的数。
完整代码
#include <iostream> using namespace std; bool isPrime(int a) { // 判断是否为素数 for (int i = 2; i * i <= a; i++) if (a % i == 0) return false; return true; } int main(void) { int N, cnt = 0; cout << "请输入一个数:"; // 提交时注释此行 cin >> N; for (int i = 5; i <= N; i++) { if (isPrime(i - 2) && isPrime(i)) cnt++; } cout << "符合素数对猜想的个数为:"; // 提交时注释此行 cout << cnt; return 0; }