描述
两个相差为2的素数称为孪生素数,如5和7,17和19等,请找出所有两个数均不大于n的孪生素数。
输入描述
输入一个正整数n。
输出描述
输出所有小于等于n的孪生素数。每对素数输出一行,中间用单个空格隔开。
若没有找到任何素数对,请输出empty。
用例输入 1
100
用例输出 1
3 5 5 7 11 13 17 19 29 31 41 43 59 61 71 73
提示:1<=n<=10000
方法1:
#include<bits/stdc++.h>
using namespace std;
int su(int n)
{
if (n<2) return 1;
for (int i=2;i*i<=n;i++)
{
if (n%i==0) return 1;
}
return 0;
}
int main()
{
int a;
cin>>a;
int m=0;
for (int i=2;i<=a;i++)
{
for (int j=2;j<=a;j++)
{
if (i%2==1 && j%2==1 && j-i==2)
{
if (su(i)==0 && su(j)==0)
{
cout<<i<<" "<<j<<endl;
m=1;
}
}
}
}
if (m==0) cout<<"empty";
}
方法2:
#include<bits/stdc++.h>
using namespace std;
int su(int n)
{
if (n<2) return 1;
for (int i=2;i*i<=n;i++)
{
if (n%i==0) return 1;
}
return 0;
}
int su1(int x,int y)
{
if (y-x!=2) return 1;
if (su(x)==0 && su(y)==0) return 0;
return 1;
}
int main()
{
int a;
cin>>a;
int m=0;
for (int i=2;i<=a;i++)
{
for (int j=2;j<=a;j++)
{
if (su1(i,j)==0)
{
cout<<i<<" "<<j<<endl;
m=1;
}
}
}
if (m==0) cout<<"empty";
}
方法3:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int li[10002]={0};
for (int i=2;i*i<=10000;i++)
{
if (li[i]!=1)
{
for (int j=i+i;j<=10000;j+=i) li[j]=1;
}
}
int n;
cin>>n;
if (n<5) cout<<"empty";
else
{
for (int i=4;i<=n;i++)
{
if (li[i]==0 && li[i-2]==0) cout<<i-2<<" "<<i<<endl;
}
}
}
//关注一下吧