PAT乙级1007:素数对猜想 (20)

题目:

让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。

输入格式:每个测试输入包含1个测试用例,给出正整数N。

输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。

输入样例:
20
输出样例:
4

我的源码如下:

#include <iostream>
using namespace std;
const int MAXN = 100010;
bool isPrime[MAXN] = {false};

class Solution{
	public:
		int CountPrimeCouple(int n){
			for (int i = 2; i < n; i++){
				if (!isPrime[i])//如果i是素数,则i的倍数都不是素数,故筛去 
					for (int j = i+i; j < n; j = j+i)
						isPrime[j] = true;
			}//利用筛法生成小于n的素数表。 
			
			int cnt = 0;
			for (int i = 2; i < n; i++){
				if (!isPrime[i] && isPrime[i+1] && !isPrime[i+2])
					cnt++;
			}//从素数表中数出间隔为2的素数的对数 
			
			return cnt;
		}
};

int main(){
	int n;
	cin >> n;
	
	Solution ans;
	cout << ans.CountPrimeCouple(n) << endl;
	
	return 0;
} 


你可能感兴趣的:(C++,源码,pat,乙级,素数对猜想)