合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻
一、题目描述 ⭐️
二、代码(C语言)⭐️
#include <stdio.h>
#include <math.h>// 函数声明
int prime(int p); // 判断是否是素数
void Goldbach(int n); // 输出 n 的哥德巴赫分解int main() {int m, n, i, cnt;// 输入两个整数 m 和 nscanf("%d %d", &m, &n);// 如果 m 是素数,输出提示if (prime(m) != 0) {printf("%d is a prime number\n", m);}// 确保 m 是大于等于 6 的偶数if (m < 6) m = 6; // 如果 m 小于 6,设置为 6if (m % 2) m++; // 如果 m 是奇数,加 1 变为偶数cnt = 0; // 计数器,用于控制输出格式// 遍历从 m 到 n 的所有偶数for (i = m; i <= n; i += 2) {Goldbach(i); // 输出当前偶数的哥德巴赫分解cnt++; // 计数器加 1// 控制输出格式:每 5 个分解换行,否则用逗号分隔if (cnt % 5) {printf(", ");} else {printf("\n");}}return 0;
}/* 你的代码将被嵌在这里 */
/** 判断是否是素数:1-是 0-不是 */
int prime(int p) {// 素数要大于 1if (p <= 1) {return 0;}// 2 是素数if (p == 2) {return 1;}// 偶数(除了 2)不是素数if (p % 2 == 0) {return 0;}// 检查从 3 到 sqrt(p) 的奇数for (int i = 3; i * i <= p; i += 2) {if (p % i == 0) {return 0; // 如果能被整除,则不是素数}}// 否则是素数return 1;
}/** 按照格式“n=p+q”输出 n 的素数分解,其中 p≤q 均为素数 */
void Goldbach(int n) {// 因为素数要大于 1,所以从 2 开始遍历,寻找满足条件的素数对for (int i = 2; i < n; i++) {// 如果 i 和 n - i 都是素数,则输出分解if (prime(i) && prime(n - i)) {printf("%d=%d+%d", n, i, n - i);return; // 找到后直接返回}}
}
三、知识点 ⭐️
C
语言 判断是否是素数(质数)
详情请查看我的另一篇文章。