输入一个非二的偶数,验证它可以分解成两个质数的和。
第一种方法:先把所有质数列出来,然后再从中找出两个质数相加等于输入的偶数,从而完成验证。
法一代码:下面展示一些 内联代码片
。
#include<stdio.h>
int main()
{
int judge, i, j, k, l;
printf("请输入你想验证的偶数\n");
scanf_s("%d", &judge);
for (i = 1; i < 99999; i++)
{
for (j = 2; j <= i; j++)
{
if (i % j == 0 && j != i) {
break;
}
else if (i % j == 0 && j == i)
{
for (k = 1; k < 99999; k++)
{
for (l = 2; l <= k; l++)
{
if (k % l == 0 && k != l) {
break;
}
else if (k % l == 0 && k == l) {
if (judge == k + i) {
printf("这个偶数是由这两个质数构成的:%d %d\n", i, k);
break;
}
else
continue;
}
}
}
}
}
}
return 0;
}
法一缺陷
1.运算过程太多循环,需要的时间长
2.不知道什么原因,即使把所有可能情况全部列出后程序依旧无法结束
改进方法——法二
思路:我们只需要验证存在性,而不是列出来所有情况,所以我们可以通过偶数找质数,只要找出一对符合条件的质数程序就可以结束了
法二代码
下面展示一些 内联代码片
。
#include <stdio.h>
int main()
{
int i = 1, j, divide;
int judge(int x);
printf("输入你想验证的偶数\n");
scanf_s("%d", ÷);
while (i < divide)
{
i++;
j = divide - i;
if (judge(i) && judge(j)) {
printf("%d可以被分解为%d和%d\n", divide, i, j);
break;
}
else
continue;
}
return 0;
}
int judge(int x)
{
int y = 2;
while (x % y != 0)
y++;
if (y == x)
return 1;
else
return 0;
}
通过构造挑选判断质数的函数judge可以简化程序,这个程序的结果会变得非常简洁。