C语言的作业
是作业,不太明白题目:编写一个程序,验证德巴赫猜想,任意一个大于6的偶数均可以表示为两个素数之和。要求:
a)输出6~20之间的偶数表示成素数之和的表达式。
b)每行输出5个表达式,每个式子之间间隔一个Tab位置,(用\t实现),且上下两行的式子要对齐。
c)统计并输出6~20之间的偶数可表示成素数之和的表达式形式个数。
给你个思路吧,假设输入的数为X
从2开始,每个素数被X减,然后计算结果是否是素数如果是就打印
如果不要求空间复杂度,可以先计算所有比X小的素数,然后存到数组里,然后for循环就完事
要求空间复杂度,那就没计算一个素数就计算(X-素数)是不是素数,是就打印 本帖最后由 yuxijian2020 于 2021-4-4 18:38 编辑
#include <stdio.h>
#define bool int
#define true 1
#define false 0
//计算素数
bool PrimeNumber(unsigned int n)
{
for (int i = n - 1; i > 1; i--)
{
if (n % i == 0)
return false;
}
return true;
}
//哥德巴赫猜想计算
void Goldbach(unsigned int n)
{
int index = 0; //用于每行显示5条结果
for (int i = n - 1; i > 1; i--)
{
if (!PrimeNumber(i) || !PrimeNumber(n - i)) //如果i不是素数,或者n - i不是素数,就直接跳过
continue;
printf_s("%3d + %3d = %3d", i, n - i, n);
index++;
if (index % 5 != 0)
printf_s("\t");
else
{
printf_s("\n");
}
}
}
void GetInputAndPrint()
{
int X = 0;
while (X <= 6) //如果输入的数小于等于6就重新输入
{
printf_s("请输入一个大于6的数:\n");
scanf_s("%d", &X);
if (X <= 6)
printf_s("输入错误!请确保输入的数大于6!\n");
}
Goldbach(X);
}
int main()
{
GetInputAndPrint();
}
页:
[1]