哥德巴赫猜想:任何一个大于6的偶数,都由两个素数相加组成
一、程序设计思路:
任意输入一个大于6的偶数,打印出组成它的两个素数。
例如输入偶数n,使n = i + j,i与j均为素数。
可利用穷举法查找i与j的值,因为n从6开始,故i可以从3开始尝试(因为1不是素数,若i=2且n是大于6的偶数,则j必定不是素数),判断i是否为素数,若i是素数则判断j(可求出j=n-i)是否为素数,若成立则返回结果,若不成立则i+=2继续查找下一个素数(因为i=3开始,故以2为步长取值令i+=2可以更快找出i的值)
二、准备过程
想要实现此代码,首先需要知道如何判断一个数是否为素数。
判断素数:对于一个整数k,如果k不能被2到根号k之间的所有整数除尽,则k是素数
sqrt() 是开根号函数
#include <math.h>
int main()
{
printf("请输入一个整数:");
int k = 0, flag = 1;
scanf("%d", &k);
for (int i = 2; i <= sqrt(k); i++)
{
if (k % i == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d是素数", k);
else
printf("%d不是素数", k);
return 0;
}
代码解析:上述代码中,输入整数k,定义flag为1,i为2。如果k除i没有余数即k对i取模为0,那么flag=0并结束for循环,k不是素数。如果k除i有余数即k对i取模不为0,那么i++,i=3,继续判断k对i取模是否为0,直至i不满足for循环条件i <= sqrt(k),若此时flag依旧是1,则k是素数。
三、代码实现-验证哥德巴赫猜想
#include <math.h>
int main()
{
int n, i, j, m, k;
loop1:
printf("请输入一个大于6的偶数:");
scanf("%d", &n);
if (n >= 6 && n%2==0) {
for (i = 3; i <= n / 2; i+=2) {
int flag1 = 1;
for (j = 2; j <= sqrt(i) + 1; j++) {
if (i % j == 0)
{
flag1 = 0;
break;
}
}
if (flag1 == 1)
{
m = n - i;
int flag2 = 1;
for (k = 2; k <= sqrt(m); k++)
if (m % k == 0)
{
flag2 = 0;
break;
}
if (flag2 == 1)
{
printf("偶数%d由素数%d和素数%d组成。", n, i, m);
break;
}
}
}
}
else
{
printf("请输入合法数字!\n");
goto loop1;
}
}
运行结果:
更多推荐
C语言入门基础_验证哥德巴赫猜想
发布评论