如4=2+2、6=3+3、8=3+5验证4~20之间的数。要求判断素数用自定义函数实现。
提示:对于任意一个大的偶数n,可通过循环变量i遍历2到n之间的数,然后分别验证i和n-i均是素数后输出即可。
#include <stdio.h>
int isPrime(int n) {
if (n <= 1) {
return 0;
}
int i;
for (i = 2; i * i <= n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int main() {
for (int n = 4; n <= 20; n += 2) {
int flag = 0;
printf("%d = ", n);
for (int i = 2; i <= n / 2; i++) {
if (isPrime(i) && isPrime(n - i)) {
flag = 1;
printf("%d + %d", i, n - i);
if (n - i != i) {
printf(" ");
}
}
}
if (!flag) {
printf("无解");
}
printf("\n");
}
return 0;
}
我可以解决该问题。
代码如下:
#include <stdio.h>
#include <stdbool.h>
bool is_prime(int n) { // 判断一个数是否为素数的函数
if (n <= 1) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
for (int i = 4; i <= 20; i += 2) { // 对4~20之间的偶数进行验证
printf("%d=", i);
bool flag = false;
for (int j = 2; j <= i / 2; j++) {
if (is_prime(j) && is_prime(i - j)) { // 判断j和i-j是否都为素数
if (flag) {
printf("+"); // 输出加号
} else {
flag = true;
}
printf("%d", j); // 输出第一个素数
printf("+%d", i - j); // 输出第二个素数
}
}
printf("\n"); // 输出换行符
}
return 0;
}
该程序首先定义了一个函数is_prime
,用来判断一个数是否为素数。接着在主函数main
中,使用了两个循环。外层循环对4~20之间的偶数进行遍历,内层循环从2开始一直遍历到i/2,分别判断内层循环变量j和i-j是否都为素数,如果都是素数,则输出两个素数的和以及等号。
代码中使用了bool类型,需要注意C语言默认是不支持bool类型的,需要在头文件中引入stdbool.h
,才能使用true和false这两个关键字。
代码输出结果如下:
4=2+2
6=3+3
8=3+5
10=3+7
10=5+5
12=5+7
14=3+11
14=7+7
16=3+13
16=5+11
18=5+13
18=7+11
20=3+17
20=7+13
20=11+9