本文通过模块化设计的方法,使用C语言设计了一个验证哥德巴赫猜想的模块化程序,源码见后文。
哥德巴赫猜想 哥德巴赫1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的偶数都可写成两个质数之和。这是一个尚待解决的数学难题,目前为止的进展是“2+1”,具体内容此处就不详述了。
本方案中,模块化设计的部分为:
- 偶数的判定模块
- 质数(对)的判定模块
- 辅助模块
- 主函数(主调用)模块
C语言完整代码:[ 程序可以多次执行对输入数据的哥德巴赫分解! ]
#include "stdio.h"
#include"math.h"
int isPrime(int);
void deverse(int n);
int main(void){
int n=0,flag=0;
do{
if(!flag){
printf("输入一个大于5的偶数,测试哥德巴赫猜想[输入一个小于6的数结束]:\n");
scanf("%d",&n);
if(n<6){
printf("请检查是否大于5,并重新输入:\n");
scanf("%d",&n);
}
flag=1;
if(n<6 printf="" n="" return="" if="" n="">=6 &&n%2==0){
deverse(n);
}
if(n%2!=0){
printf("请输入一个偶数![输入一个小于6的数结束]:\n");
scanf("%d",&n);continue;
}
printf("输入一个大于5的偶数,测试哥德巴赫猜想[输入一个小于6的数结束]:\n");
scanf("%d",&n);
}while(n>=6);
printf("Byebye!\n");
return 0;
}
int isPrime(int n){
int mid_n=sqrt(n);
for(int i=2;i<=mid_n;i++){
if(n%i==0){
return 0;
}
}
return 1;
}
void deverse(int n){
int k=0;
for(int i=1;i<=n/2;i++){
if(isPrime(i)){
if(isPrime(n-i)){
k++;
printf("Goldbach company %2d: %3d=%3d +%3d\n",k,n,i,n-i);
}
}
}
if(k==0){
printf("%d is not a Goldbach defined number!\n");
}
return;
}
运行截图:
- input: 5↙7↙4356↙3↙
- input:4↙5↙
- input:942↙99↙94↙2↙
- input:127↙648↙2↙