编写程序验证哥德巴赫猜想第二部分,每个大于等于9的奇数都可表示为3个奇素数之和。将大于等于9的奇数分解为三个奇素数之和写成一个函数,从键盘输入任一大于等于9的奇数,调用该函数,在函数中输出这三个奇素数,例如输入9,输出9=3+3+3。
二,函数部分1.判断素数
函数参数:整形。
函数作用:判断是否为素数。
返回值:返回类型为整形。如果是素数,返回1;否则返回0。
int Pri(int n)
{
for (int i = 2; i < sqrt(n); i++)
{
if (n % i == 0)
return 0;
}
return 1;
}
2.验证哥德巴赫猜想
由题意,每个大于等于9的奇数都可表示为3个奇素数之和。故只需判断大于等于3的奇数是否为素数。因为三个数相加时,一定有其中一个数小于等于和的1/3,一个数大于等于和的1/3.
函数功能:打印出哥德巴赫猜想,例如:9=3+3+3。
函数参数::整形。
返回类型:void。
void Gol(int n)
{
for (int i = 3; i <= n/3; i += 2)
{
for (int j = n/3; j <=n; j += 2)
{
if (j % 2 == 0)
j++;
int k = n - i - j;
if(Pri(i) && Pri(j) && Pri(k)&&j>=k&&k>=i)
{
printf("%d=%d+%d+%dn", n, i, j, k);
}
}
}
}
循环部分:
i从第一个奇素数3开始,小于等于和的1/3;
j从和的1/3开始,因为要判断奇数,若j为偶数则加1;
k等于三数之和减i,再减j;
判断部分:
若Pri(i) , Pri(j) , Pri(j) 均为素数,则打印n=i+j+k。
打印一下结果
可以看到,当输入值n=17时,出现了两次5+5+7,为了避免重复,在判断时可以加上条件j>=k和k>=i。
再次打印,就没有重复的结果了。
主函数:
输入一个奇数n,调用 Gol()函数。
int main()
{
int n;
scanf("%d", &n);
Gol(n);
return 0;
}
头文件:
stdio.h和math.h
三,完整代码#include#include int Pri(int n) { if (n >1) { for (int i = 2; i <= sqrt(n); i++) { if (n % i == 0) return 0; } return 1; } else return 0; } void Gol(int n) { for (int i = 3; i <= n/3; i += 2) { for (int j = n/3; j <=n; j += 2) { if (j % 2 == 0) j++; int k = n - i - j; if(Pri(i) && Pri(j) && Pri(k)&&j>=k&&k>=i) { printf("%d=%d+%d+%dn", n, i, j, k); } } } } int main() { int n; scanf("%d", &n); Gol(n); return 0; }



