D. 实验6-6 使用函数验证哥德巴赫猜想
题目描述
本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。
输入两个正整数m和n(0<=m<=n<=100),将m和n之间的偶数表示成两个素数之和,输出时每行显示5组。要求定义并调用函数prime(m)判断m是否为素数,当m为素数时返回1,否则返回0。
输入
两个正整数m和n(0<=m<=n<=100)
输出
见样例
样例查看模式
正常显示
查看格式
输入样例1
89 100
输出样例1
90=7+83, 92=3+89, 94=5+89, 96=7+89, 98=19+79
100=3+97,
这里我觉得值得注意的点有两个
首先在写ji_pr()函数(这个函数主要求出拆成两个奇素数后的第一个数是最小时)时我做了一点小优化,要求的是奇素数,所以我们从3开始,并且每次+2 ,而且当j>i/2时的情况与j<=i/2的情况是一样的,我们不必再算一次。
其次,最后输出时的格式是我觉得更值得我们反复琢磨的!!!!!!!!!!!
#include<math.h>
#include<stdio.h>
int prime(int m)
{
int i, l;
if (m == 1)
return 0;
if (m == 2)
return 1;
l = sqrt(m) + 1;
for (i = 2; i <= l; i++)
{
if (m % i == 0)
return 0;
}
return 1;
}
int ji_pr(int i)
{
int j;
for (j = 3; j <= i / 2; j += 2)
{
if (prime(j) && prime(i - j))
{
return j;
break;
}
}
}
#include<stdio.h>
int main()
{
int m, i, n, count = 0;
scanf("%d %d", &m, &n);
for (i = m; i <= n; i++)
{
if (i >= 6)
{
if (i % 2 == 0)
{
count++;
printf("%d=%d+%d", i, ji_pr(i), i - ji_pr(i));
if (count < 5)
printf(", ");
}
if (count == 5)
{
printf("\n");
count = 0;
}
}
}
return 0;
}