素数
觉得还是总结一下为好
这里涉及到直接判断和筛法(PS:黑书上看到一个更优的方法,但并不太会,等会了以后尽量补上)
利用定义直接判断:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n;
int i,j;
bool f=false;
bool pd(int x)
{
if (x==2) return true;
for (j=2;j<=trunc(sqrt(x));j++)
if (x%j==0)
return false;
return true;
}
int main()
{
scanf("%d",&n);
for (i=2;i<=n-2;i++)
if (pd(i) && pd(i+2))
{
printf("%d %d\n",i,i+2);
f=true;
}
if (f!=true)
printf("empty");
return 0;
}
素数的筛法:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
bool pd[10001]={false};
int prime[5000]={0};
int i,j;
int zz=0;
int n;
bool f=false;
int main()
{
scanf("%d",&n);
for (i=2;i<=n;i++)
{
if (pd[i]==false)
prime[++zz]=i;
for (j=i;j<=n/i;j++)
pd[i*j]=true;
}
for (i=1;i<=zz-1;i++)
if (prime[i]+2==prime[i+1])
{
printf("%d %d\n",prime[i],prime[i+1]);
f=true;
}
if (f!=true)
printf("empty");
return 0;
}
PS:上题转自NOI题库-素数对http://noi.openjudge.cn/ch0112/10/
——It's a lonely path. Don't make it any lonelier than it has to be.