以下是使用C语言编写的解决方案:

#include <stdio.h>

int isPrime(int num) {
    if (num <= 1) {
        return 0;
    }
    
    for (int i = 2; i <= num/2; i++) {
        if (num % i == 0) {
            return 0;
        }
    }
    
    return 1;
}

void findPrimes(int evenNum, int *prime1, int *prime2) {
    for (int i = evenNum / 2; i >= 2; i--) {
        if (isPrime(i) && isPrime(evenNum - i)) {
            *prime1 = i;
            *prime2 = evenNum - i;
            return;
        }
    }
}

int main() {
    int evenNum;
    while (scanf("%d", &evenNum) != EOF) {
        int prime1, prime2;
        
        findPrimes(evenNum, &prime1, &prime2);
        
        printf("%d %d\n", prime1, prime2);
    }
    
    return 0;
}

解释:

  • 首先,在主函数中使用scanf函数循环读取多行输入,每行一个偶数evenNum
  • 定义两个整型变量prime1prime2,用于存储找到的两个素数。
  • 调用findPrimes函数,传入偶数evenNum和指向prime1prime2的指针作为参数,进行素数的查找。
  • findPrimes函数中,使用从偶数一半开始的逆向循环,找到两个素数之和等于偶数的情况。在循环中,使用isPrime函数判断当前数和偶数减去当前数是否都为素数,如果是,则将这两个素数存入prime1prime2中,并返回。
  • 在主函数中,使用printf函数输出找到的两个素数prime1prime2,并在它们之间加上一个空格。
  • 循环继续,直到所有的偶数都被处理完毕。
  • 注意:为了避免输入结束后出现无限循环,使用scanf函数的返回值来判断是否到达文件末尾(EOF)。
C语言实现哥德巴赫猜想:寻找最接近的素数对

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

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