关于#小于等于#的问题,如何解决?(语言-c++)

题目描述
所谓素数是指除了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;
}

先用筛素数发筛出素数,在进行判断就行了