C++ 程序:检查一个数字是否可以表示为两个素数之和


2023 年 1 月 22 日, Learn eTutorial
1754

在这里,我们将检查一个整数是否可以表示为两个素数之和。

什么是素数?

素数(或质数,通常简称为“素数”)是一个正整数,除了 1 和它本身之外,没有其他正整数作为它的因子。例如:2、3、5、7、11。

如何编写 C++ 程序来检查一个数字是否可以表示为两个素数之和

要求用户输入一个正整数并将其存储在变量 **n** 中。使用用户函数 **check_prime()** 检查一个数字是否是素数。然后,将布尔类型变量 **flag** 初始化为 false。此变量用于确定输入数字是否可以表示为两个素数之和。然后我们从 **i = 2 到 i = n/2** 开始一个 for 循环。在每次迭代中,我们必须检查 i 是否是素数,如果 i 是素数,那么我们必须知道 n-i 是否是素数,如果 n-i 也是素数,我们可以说用户输入的数字可以表示为素数之和。

因此,我们显示结果并将标志更改为 true 或 1。否则,**flag** 在循环结束前一直保持 false 或 0。最后,如果 **flag** 为 false,则该数字可以表示为两个素数之和。

算法

步骤 1: 调用头文件 `iostream`。

步骤 2: 使用 namespace std.

步骤 3:声明两个整数类型变量 **n**、**i** 和浮点类型变量 **flag = false**;

步骤 4:要求用户输入一个正整数;

步骤 5:将数字读入变量 **n**;

步骤 6:从 **i = 2** 到 **i = n/2** 迭代一个循环。
      检查 **i** 是否是素数。
      如果是,则检查 **n-1** 是否是素数。
      如果是,则 **n** 可以表示为两个素数 **i** 和 **n-i** 之和

步骤 7:将 **flag** 设置为 true;

步骤 8:在屏幕上打印结果

步骤 9:退出
 

C++ 源代码

                                          #include <iostream>
using namespace std;

bool check_prime(int n);

int main() {

  int n, i;
  bool flag = false;

  cout << "Enter a positive  integer: ";
  cin >> n;

  for(i = 2; i <= n/2; ++i) {
    if (check_prime(i)) {
      if (check_prime(n - i)) {
        cout << n << " = " << i << " + " << n-i << endl;
        flag = true;
      }
    }
  }

  if (!flag)
    cout << n << " can't be expressed as sum of two prime numbers.";

  return 0;
}

// check prime number
bool check_prime(int n) {
  int i;
  bool is_prime = true;

  // 0 and 1 are not prime numbers
  if (n == 0 || n == 1) {
    is_prime = false;
  }
  
  for(i = 2; i <= n/2; ++i) {
    if(n % i == 0) {
      is_prime = false;
      break;
    }
  }

  return is_prime;
}
                                      

输出

Enter a positive  integer: 48
48 = 5 + 43
48 = 7 + 41
48 = 11 + 37
48 = 17 + 31
48 = 19 + 29