让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
这个题挺简单的,自己写一个素数判断函数 boo judge(int x),但是这里一定要注意,不要超时,所以要优化一下这个函数。(i<x优化为i<sqrt(x))
bool judge(int x)
{
if(x==2){return 1;}
for(int i=2;i<sqrt(x);i++)
{
if(x%i==0)
return 0;
}
return 1;
}
AC:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int N,j=2,B[100000]; //B[i]代表第i个质数。
int num=0;
B[1]=2;
cin>>N;
bool judge(int);
for(int i=3;i<=N;i++)
{
if(judge(i))
{
B[j]=i;
j++;
}
} //找出了N以内所有的质数。
for(int i=1;i<j-1;i++)
{
if(B[i+1]-B[i]==2)
{
num++;
}
}
cout<<num;
return 0;
}
bool judge(int x) //true为质数
{
if(x==2) {return 1;}
for(int j=2;j<sqrt(x)+1;j++)
{
if(x%j==0) {return 0;}
}
return 1;
}
优化后代码:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
bool judge(int);
int N,num=0;
cin>>N;
for(int i=5;i<=N;i++)
{
if(judge(i-2)&&judge(i))
{
num++;
}
}
cout<<num;
return 0;
}
bool judge(int x)
{
for(int i=2;i<=sqrt(x);i++)
{
if(x%i==0)
{
return false;
}
}
return true;
}