编程验证哥德巴赫猜想
题目:哥德巴赫猜想可以分为两个猜想:1.每个不小于6的偶数都是两个奇素数之和;2.每个不小于9的奇数都是三个奇素数之和。如:6 = 3 + 3,
8 = 3 + 5,
10 = 5 + 5 = 3 + 7,
77=53+17+7;
编程实现:
1、从键盘输入一个正整数n(n<65535),若输入的是不小于6的偶数,按照猜想1将其分解;若输入的是不小于9的奇数,按照猜想2将其分解;若有多种表示方式,将它们都表示出来,如10的分解有两种。若输入的数不符合要求,给出提示。
以下是我编的程序:
#include<stdio.h>
#include<math.h>
unsigned int n;
void main()
{
unsigned int a,c=1;
int isprime(int b);
unsigned int eve[3]={0};
unsigned int odd[4]={0};
unsigned int spilt_eve(unsigned int array[3]);
unsigned int spilt_odd(unsigned int array[4]);
/*input number*/
for(;;)
{
printf("Please input a number.(0 ~ 65535)\n");
scanf("%d",&a);
if((a%2==0)&&(a<6))
printf("if the number is even number, please make sure that it is beyond 6.\n");
else if((a%2!=0)&&(a<9))
printf("if the number is odd number, please make sure that it's beyond 9.\n");
break;
}
/*distinguish number and put the equotion out.*/
if(a%2==0)
{
eve[0]=a;
for(n=3;n<(unsigned int)a/2;n++)
{
spilt_eve(eve);
if(eve[1]>=n)
printf("%d=%d+%d\n",eve[0],eve[1],eve[2]);
}
}
else
{
odd[0]=a;
for(n=3;n<(unsigned int)a/2;n++)
{
spilt_odd(odd);
if(odd[1]>=n)
printf("%d=%d+%d+%d\n",odd[0],odd[1],odd[2],odd[3]);
}
}
}
/*make sure the number is prime or not.*/
int isprime(int x)
{
int i,y=1;
for(i=2;i<=(int)sqrt(x);i++)
{
if(x%i==0)
{
y=0;
break;
}
}
return(y);
}
/*split the even number.*/
unsigned int spilt_eve(unsigned int eve[3])
{
int i,m;
i=eve[0];
for(m=n;m<=i/2;m++)
{
if(isprime(m)==1)
{
if((isprime(i-m==1))&&((i-m)>=3))
{
eve[1]=m;
eve[2]=i-m;
break;
}
}
}
}
/*split the odd number.*/
unsigned int spilt_odd(unsigned int odd[4])
{
unsigned int eve[3];
int i,j,k;
i=odd[0];
for(k=n;k<=i/2;k++)
{
if(isprime(k)==1)
{
j=i-k;
if(j%2==0)
{
eve[0]=j;
spilt_eve(eve);
odd[1]=k;
odd[2]=eve[1];
odd[3]=eve[2];
break;
}
}
}
}
结果不对,会出现数据溢出的结果,但我没发现问题在哪里,请教一下大家。另外,如果您有更好的办法,在对我的程序作出了修改之后,麻烦给我一个思路或者指导。谢谢。