哥德巴赫猜想
众所周知,哥德巴赫猜想是指:
一个不小于6的偶数可以表示为两个奇素数之和。
本程序要实现的功能是对于输入的偶数n,输出所有可能的分解为两个奇素数的结果(按第一个奇素数从小到大的顺序输出)。
完整代码
本程序完整代码如下:
c
#include <stdio.h>
#include <math.h>
int prime(unsigned int num) {
for (unsigned int i = 2; i <= sqrt(num); i++) {
if (prime(i) && num % i == 0) {
return 0;
}
}
return 1;
}
int main() {
unsigned int n, k;
scanf("%d", &n);
for (unsigned int j = 3; j <= n / 2; j += 2) {
k = n - j;
if (prime(j) && prime(k)) {
printf("%d=%d+%d\n", n, j, k);
}
}
return 0;
}
代码解释
prime函数
c
int prime(unsigned int num) {
for (unsigned int i = 2; i <= sqrt(num); i++) {
if (prime(i) && num % i == 0) {
return 0;
}
}
return 1;
}
prime函数的作用是判断正整数num是否为素数。判断素数的方法是遍历从2到√n之间的所有素数,若均不是num的素因数,则num是素数,否则不是素数。若num有大于√n的素因数k,则必有素因数num/k<√n,因此只需遍历2到√n即可。这里,用到了一次函数迭代。
主函数
c
int main() {
unsigned int n, k;
scanf("%d", &n);
for (unsigned int j = 3; j <= n / 2; j += 2) {
k = n - j;
if (prime(j) && prime(k)) {
printf("%d=%d+%d\n", n, j, k);
}
}
return 0;
}
首先用户输入正整数n,再对从3(正数范围内最小的奇素数)到n/2范围内的所有奇数讨论是否满足题意,若满足,直接打印。
运行结果示例
以200为例: