编写一个判断正整数7是否是素数的函数prime(),使用这个函数验证哥德巴
赫猜想(任何一个大于4的偶数m都能表示为两个奇素数之和),m由键盘输入。
该回答引用chatgpt:
#include <stdio.h>
int prime(int n); // 声明判断素数的函数
int main()
{
int m, i, flag = 0;
printf("请输入一个大于4的偶数m:");
scanf("%d", &m);
for(i = 3; i <= m / 2; i += 2) // 从3开始遍历奇数
{
if(prime(i) && prime(m - i)) // 如果i和m-i都是素数
{
printf("%d = %d + %d\n", m, i, m - i); // 输出分解结果
flag = 1; // 标记已找到
break; // 找到一组即可退出循环
}
}
if(!flag) // 如果没找到
printf("未找到符合条件的结果!\n");
return 0;
}
// 判断素数的函数
int prime(int n)
{
int i;
if(n <= 1) // 如果n小于等于1,则不是素数
return 0;
for(i = 2; i <= n / 2; i++) // 从2开始遍历
{
if(n % i == 0) // 如果n能被i整除
return 0; // 不是素数
}
return 1; // 是素数
}
解释一下代码的实现过程:
首先,定义一个判断素数的函数prime(),返回值为int类型,参数为一个整数n。
然后,在主函数中,先输入一个大于4的偶数m。接着,从3开始遍历所有奇数i,判断i和m-i是否都是素数,如果是,则输出分解结果,标记已找到,退出循环。
最后,如果未找到符合条件的结果,则输出提示信息。
注意,本题中的哥德巴赫猜想只适用于大于4的偶数。
/* 使用函数求100以内的全部素数 */
#include <stdio.h>
#include <math.h> /* 调用求平方根函数,需要包含数学库 */
int main(void)
{
int count, m;
int prime(int m); /* 函数声明 */
count = 0; /* count记录素数的个数,用于控制输出格式 */
for(m = 2; m <= 100; m++){
if(prime(m)!=0){ /* 调用prime(m)判断m是否为素数 */
printf("%6d", m); /* 输出m */
count++; /* 累加已经输出的素数个数 */
if (count %10 == 0) printf("\n"); /* 如果count是10的倍数,换行 */
}
}
printf("\n");
}
/* 定义判断素数的函数,如果m是素数则返回1("真");否则返回0("假")*/
int prime(int m)
{
int i, n;
if(m == 1) return 0; /* 1不是素数,返回0 */
n = sqrt(m);
for( i = 2; i <= n; i++)
if (m % i == 0){ /* 如果m不是素数 */
return 0; /* 返回0 */
}
return 1; /* m是素数,返回1 */
}