以下代码旨在实现输入一个正偶数 N,输出 (N-2)/2 行,每行输出一个正偶数 2i+2,以及该偶数分解为两个最小质数之和的结果。

#include<iostream>
#include<cmath>
using namespace std;

bool is_prime(int n)
{
    int sqr = sqrt(double(n));
    int i = 2;
    while (i <= sqr)
    {
        if (n % i != 0)  i = i + 1;
        else break;
    }
    if (i > sqr) return true;
    else return false;
}

int main()
{
    int N = 0;
    cin >> N;
    for (int i = 1; i <= (N - 2) / 2; i++)
    {
        int num = 2 * i + 2;
        for (int j = 2; j <= num; j++)
        {
            if (is_prime(j) && is_prime(num - j));
            cout << num << '=' << j << '+' << (num - j) << endl;
            break;
        }
    }
    return 0;
}

代码中的问题在于 if 语句的结尾处多了一个分号。这会导致 if 语句后面的输出语句始终被执行,而不受 if 语句的条件限制。为了修正这个问题,你应该移除 if 语句末尾的分号。

修正后的代码如下:

#include<iostream>
#include<cmath>
using namespace std;

bool is_prime(int n)
{
    int sqr = sqrt(double(n));
    int i = 2;
    while (i <= sqr)
    {
        if (n % i != 0)  i = i + 1;
        else break;
    }
    if (i > sqr) return true;
    else return false;
}

int main()
{
    int N = 0;
    cin >> N;
    for (int i = 1; i <= (N - 2) / 2; i++)
    {
        int num = 2 * i + 2;
        for (int j = 2; j <= num; j++)
        {
            if (is_prime(j) && is_prime(num - j))
            {
                cout << num << '=' << j << '+' << (num - j) << endl;
                break;
            }
        }
    }
    return 0;
}

现在,代码会在满足条件的情况下输出符合要求的等式,而不再无条件输出。

C++ 代码调试:修复输出错误 -  分解偶数为两个质数之和

原文地址: https://www.cveoy.top/t/topic/Tw8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录