C语言实现哥德巴赫猜想:寻找最接近的素数对
以下是使用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。 - 定义两个整型变量
prime1和prime2,用于存储找到的两个素数。 - 调用
findPrimes函数,传入偶数evenNum和指向prime1和prime2的指针作为参数,进行素数的查找。 - 在
findPrimes函数中,使用从偶数一半开始的逆向循环,找到两个素数之和等于偶数的情况。在循环中,使用isPrime函数判断当前数和偶数减去当前数是否都为素数,如果是,则将这两个素数存入prime1和prime2中,并返回。 - 在主函数中,使用
printf函数输出找到的两个素数prime1和prime2,并在它们之间加上一个空格。 - 循环继续,直到所有的偶数都被处理完毕。
- 注意:为了避免输入结束后出现无限循环,使用
scanf函数的返回值来判断是否到达文件末尾(EOF)。
原文地址: https://www.cveoy.top/t/topic/B86 著作权归作者所有。请勿转载和采集!