1. 程式人生 > >PAT 1007 素數對猜想 C++(解決最後一測試點超時)

PAT 1007 素數對猜想 C++(解決最後一測試點超時)

讓我們定義d​n​​為:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i個素數。顯然有d​1​​=1,且對於n>1有d​n​​是偶數。“素數對猜想”認為“存在無窮多對相鄰且差為2的素數”。

現給定任意正整數N(<10​5​​),請計算不超過N的滿足猜想的素數對的個數。

輸入格式:

輸入在一行給出正整數N

輸出格式:

在一行中輸出不超過N的滿足猜想的素數對的個數。

輸入樣例:

20

輸出樣例:

4

本題思路為先將全部素數求出,再將相鄰相差2的素數對的數目求出

本題關鍵點為求素數時,不必從2到n-1去搜尋,只需2到sqrt(n)即可,否則最後一測試點會超時

程式碼如下:

#include <iostream>
using namespace std;
#include <math.h>
#define N 100000


int main()
{
	int i, j, k = 0;
	int q = 0;
	int n;
	int number = 0;
	int flag = 1;
	int A[N], B[N];
	cin >> n;
	for (i = 3; i <= n; i++)
	{
		A[k++] = i;
	}
	for (i = 0; i<k; i++)
	{
		for (j = 2; j<=sqrt(A[i]); j++)
		{
			if (A[i] % j == 0) { flag = 0; break; }
		}
		if (flag == 1) B[q++] = A[i];
		flag = 1;
	}
    for (i = 0; i<q-1; i++)
	{
		if (B[i + 1] - B[i] == 2)
		{
			number++;
		}
	}
	cout << number;
	return 0;
}