题目:
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
分析:
素数从小到大为:2,3,5,7,11,13,17……
d1=3-2=1
从这以后的差都是偶数(除了2,其他的素数都是奇数,奇数-奇数=偶数);
我们要找的就是相邻的两个素数的差为2的对数。
方法:找到小于N的所有素数,相邻的素数作差。差为2,对数加一。
求x是否为素数方法:
x依次对从2开始直到根号x的数取模。
如果存在模为0,证明这个数是因数,x不是素数。
如果2~根号x都未找到x的因数,则x是素数。
代码:
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int num,k=0,all=0;
cin>>num;
int prime[num]={0};
for(int i=1;i<=num;i++){
bool flag=true;
//cout<<"当前测试素数"<<i<<"结果:"<<endl;
float in=sqrt(i);
for(int j=2;j<=in;j++){
if(i%j==0){
flag=false;
//cout<<"不是素数"<<endl;
break;
}
}
if(flag){
prime[k]=i;
//cout<<"是素数"<<endl;
k++;
}
}
for(int i=0;i<k;i++){
//cout<<prime[i]<<" ";
if(prime[i+1]-prime[i]==2)
all++;
}
cout<<all; //素数对的数目
}