让我们定义 d~n~ 为:d~n~ = p~n+1~ - p~n~,其中 p~i~ 是第i个素数。显然有 d~1~=1 且对于n>1有 d~n~ 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 10^5^),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
分析:
这道题本身非常简单,只不过需要注意边界值。
#include <iostream> using namespace std; //素数判断法 bool isPrime(int n) { if (n < 2) { return false; } int i; for (i = 2; i * i <= n; i++) { if (n%i == 0){ return false; } } return true; } int main() { int N; cin >> N; int totalNumber = 0;//计数所有的素数对 //定义一个数组,来存放小于N的所有的素数 int primeNumber[100001] = { 0 }; int j = 0;//给primeNumber数组计数 //判断一个数是否为素数,是素数就把他存放到primeNumber数组中。 for (int i = 0; i <= N; i++) { if (isPrime(i)) { primeNumber[j] = i; j++; } } for (int i = 1; i < N; i++) { if (primeNumber[i] - primeNumber[i - 1] == 2) { totalNumber = totalNumber + 1; } } cout << totalNumber; system("pause"); return 0; }