让我们定义为: = ,其中pi是第i个素数。显然有=1,且对于n>1有是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
想法:
既然让求素数对,先求素数,再通过 公式= (说白了就是相邻两个数做差),详情见代码;
//1007 素数对猜想
#include <iostream>
#include <math.h>
#include <algorithm>
#include <functional>
using namespace std;
//判定是否为素数
bool CalPrimeNum(int Calnum)
{
int num;
//pow(Calnum,1/2) or 也可以在for(,i*i<=num,)
num = sqrt(Calnum);
for(int i=2 ; i<=num ; i++){
if(Calnum % i == 0 )return false;
}
return true;
}
int main(){
int a[10000];//存储素数
int Cin,temp=0;//输入,素数个数
int temp1=0;//记录素数对个数
cin >>Cin;
for(int i=1 ; i<= Cin ; i++){
if(CalPrimeNum(i)){
a[temp]=i;
temp++;
}
}
//排序 降序
sort(a,a+temp,greater<int>());
for(int j= 0 ; j<=temp; j++){
if(a[j]-a[j+1]==2) ++temp1;
}
cout <<temp1;
}