偶数分解,输入一个大于等于4的偶数n,可以分解成两个质数的和。使得两个质数的差尽量小。

输入一个大于等于4的偶数n,可以分解成两个质数的和。使得两个质数的差尽量小。
输入:输入大于等于4的偶数
输出:输出两个质数,用空格分开


#include <iostream>
using namespace std;
const int Max = 100;
int check[Max] = { 0 };
int prime[Max] = { 0 };
void isPrime() {
    for (int i = 2; i <= Max; i++) {
        if (!check[i]) {
            prime[++prime[0]] = i;
        }
        for (int j = 1; j <= prime[0] && i * prime[j] <= Max; j++) {
            check[i * prime[j]] = 1;

            if (i % prime[j] == 0) {
                break;
            }
        }
    }
}
int main(int argc, const char* argv[]) {
    isPrime();
    int n;
    cout << "请输入一个大于等于4的偶数n:" << endl;
    cin >> n;
    for (int i = n / 2; i > 0; i--) {
        if (check[i] == 0 && check[n - i] == 0) {
            cout << i << " " << n - i << endl;
            break;
        }
    }
    return 0;
}


链接:https://blog.csdn.net/yi_tong_/article/details/120373124

供参考:

#include <stdio.h>
int  isPrime(int n)
{
    int i;
    if (n <= 3)  return n > 1;
    for (i = 2; i * i <= n; i++)
        if (n % i == 0) return 0;
    return 1;
}
int main()
{
    int i, n;
    while (scanf("%d", &n) == 1 && n > 0) // 输入 <= 0  结束
    {
        if (n % 2 != 0) continue;  //输入非偶数,重新输入
        for (i = n / 2; i > 1; i--) {
            if (isPrime(i) && isPrime(n - i))
            {
                printf("%-d=%-d+%-d\n", n, i, n - i);//输出
                break;
            }
        }
    }
    return 0;
}