top1编程
← 返回题目
题解

素数对

2 条题解

  • 0
    @ 2026-7-29 20:23:02
    #include<bits/stdc++.h>
    using namespace std;
    bool isprime(int s) {//判断质数的函数
    	if (s <= 1) {//1不是质数
    		return false;
    	}
    	//在2~s-1这个范围内找因数,只要因数存在就不是质数
    	for (int i = 2; i <= s - 1; i++) {
    		if (s % i == 0) {//只要能被整除,就不是质数
    			return false;
    		}
    	}
    	return true;//上面两个部分都没有返回,就说明这是一个质数
    }
    int main(){
    	int n;
    	cin >> n;
    	if (n < 5) {//小于5没有质数对
    		cout << "empty";
    	}
    	//扫描n以内的素数对
    	for (int i = 1; i <= n - 2; i++) {//循环范围不可以超过n - 2
    		if (isprime(i) && isprime(i + 2)) {
    			cout << i << &#39; &#39; << i + 2 << endl ;
    		}
    	}
    	return 0;
    }
    
    • 0
      @ 2026-7-29 0:22:11
      #include <iostream>
      using namespace std;
      
      // 判断一个数是不是素数
      bool isPrime(int x) {
          // 小于 2 的数不是素数
          if (x < 2) {
              return false;
          }
      
          // 从 2 枚举到 sqrt(x)
          // 如果 x 能被 i 整除,说明 x 不是素数
          for (int i = 2; i * i <= x; i++) {
              if (x % i == 0) {
                  return false;
              }
          }
      
          // 没有找到因数,说明是素数
          return true;
      }
      
      int main() {
          int n;
          cin >> n;
      
          bool found = false; // 记录有没有找到素数对
      
          // 枚举第一个素数 i
          // 因为第二个数是 i + 2,所以 i + 2 必须 <= n
          for (int i = 2; i + 2 <= n; i++) {
              if (isPrime(i) && isPrime(i + 2)) {
                  cout << i << " " << i + 2 << endl;
                  found = true;
              }
          }
      
          // 如果没有找到任何素数对,输出 empty
          if (!found) {
              cout << "empty" << endl;
          }
      
          return 0;
      }
      
      • 1