一、題目
讓我們定義dn爲:dn=pn+1−pn,其中pi是第i個素數。顯然有d1=1,且對於n>1有dn是偶數。“素數對猜想”認爲“存在無窮多對相鄰且差爲2的素數”。
現給定任意正整數N
(<105),請計算不超過N
的滿足猜想的素數對的個數。
輸入格式:
輸入在一行給出正整數N
。
輸出格式:
在一行中輸出不超過N
的滿足猜想的素數對的個數。
輸入樣例:
20
輸出樣例:
4
二、思路
1.何爲素數,如何判斷
素數就是隻能被1 和自身整除的數,判斷一開始我使用了2到n-1進行判斷是否爲素數。但是後面我提交發現,運行超時錯誤。那麼肯定是算法效率的問題,我把n-1換成sqrt(n)就好了。
2.使用vector來錄入n範圍內的素數。
3.遍歷進行判斷這個數跟後一個數只差是否爲2,之後計數器加一。
三、代碼實現
#include <iostream>
using namespace std;
#include <vector>
#include <cmath>
int main()
{
//f錄入用戶輸入
int num;
cin >> num;
//數組存放素數
vector<int>array;
//循環遍歷判斷是否爲素數
for(int i = 1; i <= num; i++)
{
//臨時變量用來判斷是否爲素數
int temp = 0;
//除了1和本身之外被整除就算是素數
for(int j = 2; j <= sqrt(i) ; j++)
{
if(i % j == 0)
{
temp++;
break;
}
}
//添加進數組
if(temp == 0)
{
array.push_back(i);
}
}
//計數器
int top = 0;
//循環進行比較
for(vector<int>::iterator it = array.begin(); it < array.end(); it++)
{
if(* (it+1) - *it == 2)
{
top++;
}
}
cout << top;
return 0;
}