输入一个非二的偶数,验证它可以分解成两个质数的和。
第一种方法:先把所有质数列出来,然后再从中找出两个质数相加等于输入的偶数,从而完成验证。 法一代码:
#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可以简化程序,这个程序的结果会变得非常简洁。