问题描述:
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数
N
(<105),请计算不超过N
的满足猜想的素数对的个数。输入格式:
输入在一行给出正整数
N
。输出格式:
在一行中输出不超过
N
的满足猜想的素数对的个数。
关键:
- 素数判定
- 数组动态搜寻
- 相邻,相差为2
代码描述:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
vector<int> ans;
int isprimes(int m){
double sqrtFloorNum = floor(sqrt(m));
for (int i = 2; i <= sqrtFloorNum; i++){
if (0 == m % i){
return false;
}
}
return true;
}
int num(){
int count=0;
for(int i=0;i<ans.size()-1;i++){
if(ans[i+1]-ans[i]==2){
count++;
}
}
return count;
}
int main(){
int m;
cin>>m;
ans.push_back(2) ;
for(int i=3;i<=m;i++){
if(isprimes(i)){
ans.push_back(i);
}
}
cout<<num()<<endl;
return 0;
}