思路

  1. 明确什么是素数:只能被1和它本身整除的数为素数
  2. 得到输入数据的所有素数,注意相同的素数存2次。如:4由2和2组成,2需要存2次
  3. 比较组合找到最小的素数之差,将最小的差存起来
  4. 循环结束后输出

Answer

#include<stdio.h>

int main() {
    int val;
    int num[1000];
    scanf("%d", &val);
    int i, j;
    int pre;
    int next;
    int max = 10000;
    int k = 0;
    //得到素数
    for (i = 1; i <= val; i++) { //1是素数从2开始
        int flg = 0;
        for (j = 2; j < i; j++) { //和2-本身-1取余有0则不为素数
            if ((i % j) == 0) {
                flg = 1; //不是素数
            }
        }
        if (flg == 0) {
            num[k++] = i;
            if (val == (i * 2)) {
                num[k++] = i;
            }
        }
    }
    //比较组合找到最小的素数之差
    for (int i = 1; i < k; i++) {
        for (int j = i + 1; j < k; j++) {
            if (num[i] + num[j] == val) {
                if ((num[j] - num[i]) < max) {
                    max = num[j] - num[i];
                    pre = num[i];
                    next = num[j];
                }
            }
        }
    }
    printf("%d\n", pre);
    printf("%d\n", next);
    return 0;
}