PAT 1007 素數對猜想 C++(解決最後一測試點超時)
阿新 • • 發佈:2019-01-29
讓我們定義dn為:dn=pn+1−pn,其中pi是第i個素數。顯然有d1=1,且對於n>1有dn是偶數。“素數對猜想”認為“存在無窮多對相鄰且差為2的素數”。
現給定任意正整數N
(<105),請計算不超過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; }