題目:
輸入格式:
輸入在一行給出正整數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; //素數對的數目
}