题目描述
所谓素数是指除了1和它本身以外,不能被任何整数整除的数,1不是素数。
定义两个相差为2的素数称为素数对,如5和7,17和19等。
本题目要求找出所有两个数均不大于 ( )的素数对。
输入格式
一个正整数( )
输出格式
所有小于等于的素数对。
每对素数对输出一行,中间用单个空格隔开。
若没有找到任何素数对,输出empty。
样例
样例输入
100
样例输出
3 5
5 7
11 13
17 19
29 31
41 43
59 61
71 73
实现如下:
#include <iostream>
using namespace std;
int isPrime(int n)
{
if(n<2) return 0;
int i;
for(i=2;i*i<=n;i++) {
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int n, i,flag=0;
cin >> n;
for(i = 2; i < n-2; ++i) {
if(isPrime(i) && isPrime(i+2)) {
flag=1;
cout << i << " " << i+2 <<endl;
}
}
if (!flag)
cout << "empty";
return 0;
}
using namespace std;
bool Prime(int n)
{
if(n<2)
return false;
for(int j = 1;j<n;j++)
{
if(j>1&&n%j ==0)
{
return false;
}
}
return true;
}
int main(int argc, char *argv[]) {
int n = 0;
cin >> n;
bool flag = false;
for(int i = 0;i<n-2;i++)
{
if(Prime(i)&&Prime(i+2))
{
flag = true;
cout << i<<" "<<i+2<< endl;
}
}
if(!flag)
cout <<"empty"<< endl;
}
#include <iostream>
#include <cmath>
using namespace std;
int isprime(int x)
{
if (x < 2)
return 0;
int n = static_cast<int>(sqrt(x));
for (int i = 2; i <= n; i++)
if (x % i == 0)
return 0;
return 1;
}
int main()
{
int n, count = 0;
cin >> n;
for (int i = 2; i <= n; i++)
{
if (isprime(i) && isprime(i + 2))
{
cout << i << ' ' << i + 2 << '\n';
count++;
}
}
if (count == 0)
cout << "empty";
return 0;
}
代码:
#include <iostream>
using namespace std;
int f(int x)
{
for(int i=2;i*i<=x;i++)
{
if(x%i==0) return 0;
}
return 1;
}
int main()
{
int n;
bool flag=0;
cin>>n;
int a[n];
int j=0;
for(int i=2;i<=n;i++)
{
if(f(i))
{
a[j]=i;
j++;
}
}
for(int i=1;i<j;i++)
{
if(a[i]-a[i-1]==2){
cout<<a[i-1]<<" "<<a[i]<<endl;
flag=1;
}
}
if(!flag) cout<<"empty"<<endl;
return 0;
}
#include <iostream>
using namespace std;
const int N=1000010;
bool f[N];
int main() {
int n;
cin>>n;
for(int i=2;i*i<=n;i++)
{
if(!f[i])
{
for(int j=i+i;j<=n;j=j+i)
{
if(!f[j])
{
f[j]=true;
}
}
}
}
for (int i=2;i<=n-2; i++) {
if(f[i]==false&&f[i+2]==false)
{
cout<<i<<" "<<i+2<<endl;
}
}
return 0;
}
先用筛素数发筛出素数,在进行判断就行了