1.验证歌德巴赫猜想:2000以内的正偶数(不包括2)都能够分解为两个质数之和。
算法思路:将整数分解为两个整数,然后判断它们是否均为质数。若是,则满足题意并输出;否则重新进行分解和判断。其中,判断一个整数是否为质数采用函数实现。每个偶数只要得到一种分解就停止,不必要求出该偶数的所有质数和组合
2.每个偶数表达成形如:4=2+2的形式,请每行输出4个偶数及其分解结果。
(另附一些无聊要求:
单个表达式用以下格式字符串输出:
“%4d=%4d+%4d”
每行输出4个,每个表达式的后面要输出一个空格与后面的表达式进行分割,但本行的第4个表达式后不能有空格,要直接换行。
注意:最后一行输出有可能不足4个表达式,则该行最后一个表达式的后面仍然要输出一个空格。)
#include<stdio.h>
#include<math.h>
int panduanzhishu(int x)
{
int k, y, i, p;
k = (int)sqrt(x);
if (x == 1)
{
p = 0;
}
else
{
for (i = 2; i <= k; i++)
{
y = x % i;
if (y == 0)
{
p = 0;
break;
}
}
if (i > k)
{
p = 1;
}
}
return p;
}
int main()
{
int m, a, b, e, f;
printf("2000以内的正偶数(不包括2):");
scanf_s("%d", &m);
for (a = 1, b = m - a; a <= m - 1; a++)
{
e = panduanzhishu(a);
f = panduanzhishu(b);
if (e == 1 && f == 1)
{
printf("歌德巴赫猜想正确");
break;
}
}
if (m == a)
printf("歌德巴赫猜想错误");
return 0;
}
2.在1的基础上改动一下
#include<stdio.h>
#include<math.h>
int panduanzhishu(int x)
{
int k, y, i, p = 0;
k = (int)sqrt(x);
if (x == 1)
{
p = 0;
}
else
{
for (i = 2; i <= k; i++)
{
y = x % i;
if (y == 0)
{
p = 0;
break;
}
}
if (i > k)
{
p = 1;
}
}
return p;
}
int main()
{
int m, a, b = 0, e, f, g = 0;
for (m = 4; m <= 2000; m = m + 2)
{
for (a = 1; a <= m - 1; a++)
{
b = m - a;
e = panduanzhishu(a);
f = panduanzhishu(b);
if (e == 1 && f == 1)
{
g++;
if (g / 4 == 1)
{
printf("%4d=%4d+%4d\n", m, a, b);
g = 0;
}
else
printf("%4d=%4d+%4d ", m, a, b);
break;
}
}
}
return 0;
}```