Skip to content

11351: 【原1351】丁姐猜想

题目

题目描述

author: SSY 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/1351

Description

在1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的偶数都可写成两个质数之和。

同时部分奇数也能写成两个质数的和。丁姐觉得,找出这些奇数的规律自己就能够名垂青史了。

你现在要做的是,对于给定一个数N,分解成两个质数和,并且这两个质数的差的绝对值要尽量小。如果这个数无法分解成两个质数的和,则输出一个“NO”(不含双引号)。

Input Format

输入只有一个数N。

Output Format

输出一个NO或者用空格分开的两个质数,小的质数在前。

Sample Input

54749110

Sample Output

27374261 27374849

yyong119's solution

#include <cstdio>
#include <cmath>

bool IsPrime(int number) {

    int max_limit = (int)sqrt(number);
    for(int i = 2; i <= max_limit; ++i)
        if(number % i == 0)
            return false;
    return true;
}

int main() {

    int number, res1, res2;
    scanf("%d", &number);
    if(number % 2 == 0) {
        for(res1 = res2 = number / 2; true; --res1, ++res2)
            if(IsPrime(res1) && IsPrime(res2)) {
                printf("%d %d", res1, res2);
                return 0;
            }
    }
    else if(IsPrime(number - 2))
            printf("%d %d", 2, number - 2);
        else
            printf("NO");
    return 0;
}