题解:#83.哥德巴赫猜想 审核通过

lyh045 CSP-J2二等 2024-10-12 18:01:52 6

题目分析:

题目告诉我们,大于2的任意偶数可分解为两个质数。

当然,可能有多种解,在这冲情况下,我们只需要找到第一个加数最小,并且输出这个偶数减去第一个数的值就行了(前提是这两个数都为质数)。

解决方法:

我们设该偶数为n,第一个加数为a,那么第二个加数为(n-a)。

根据分析,我们知道当a与(n-a)都是质数时,若a最小,则他们就是正确的解。

那么如何判断质数呢?为了方便,我们可以写一个判断质数的函数。之后暴力查找就ok了

函数代码

bool pan{int N) {
    int i;
    if (N != 1) {
        for (i = 2; i <= int(sqrt(N)); i++) { //遍历1~sqrt(N)找因数
            if (N % i == 0 || int(sqrt(N)) == 0) {
                return 0//有不只两个因数,返回false
            }
        }
        return 1;      //上面没有返回0,即只有两个因数,返回true
    } Else if 【N == 1return 0//1既不是质数也不是合数,返回0
}

你们就抄吧

判断质数搞定之后,我们就可以开始主程序的编写了。

伪代码

int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n / 2; i += 2{  //遍历(暴力查找)
        if (pan(i) && pan(n - i){  //判断i与n-i是否都是质数,若是,输出解;否,则继续遍历
            cout <《 i << ' ' << n - i;
            return 0//查找到解,可直接返回
        }
    }
}
{{ vote && vote.total.up }}