题目
思路
- 找到不超过N的所有素数,并用数组记录序号
- 判断相邻dn是够等于2,记录数量
- 输出。
注:第一遍代码完成后,测试点二一直显示错误。对比发现,测试数据应该是输入的N小于2,此时若求素数表函数,循环开始i<2便会出错。改为如下后正确。
void findprime(int m){
for(int i=2;i<=m;i++){
if(isprime(i)==true) prime[num++]=i;
}
}
AC代码
#include<bits/stdc++.h>
using namespace std;
bool isprime(int n){
if(n<2) return false;
for(int i=2;i*i<=n;i++){
if(n%i==0) return false;
}
return true;
}
int prime[10001],num=1;//从第一个素数开始寻找,没有第0个素数
void findprime(int m){
for(int i=2;i<=m;i++){
if(isprime(i)==true) prime[num++]=i;
}
}
int main(){
int N;
cin>>N;
findprime(N);
int d=0;
for(int i=1;i<=num;i++){
if(prime[i+1]-prime[i]==2) d++;
}
cout<<d;
return 0;
}