C语言验证哥德巴赫猜想:任一充分大的偶数,可以用两个素数之和表示,例如: 4 = 2 + 2 6 = 3 + 3 .. 9 8 = 1 9 + 7 9 从键盘上输入两个整数m和n,将m和n之间的所有偶数写成素数之和。
(1)prime函数需要判断n是否小于2
(2)2也是素数,Goldbach 函数中,k需要从2开始
(3)题目要求输出所有偶数的素数和,所以Goldbach函数中,需要判断i是否是偶数
代码修改如下:
#include<stdio.h>
#include<math.h>
void Goldbach ( int a , int b );
int main ()
{
int n,m ;
printf ("请输入两个正整数( n < m ):");
scanf ("%d%d",&n ,&m );
if(n<m) Goldbach(n,m);
else Goldbach (m,n);
return 0;
}
int prime ( int n )
{
int i ,m = sqrt((double)n);
if(n<2) return 0;
for (i=2; i <= m; i++)
if (n%i==0)
return 0;
return 1;
}
void Goldbach ( int a , int b )
{
int i, k ;
for (i=a;i<=b;i++)
{
if(i%2==1)
continue;
k=2;
while(k<=i/2)
{
if ( prime(k)*prime( i-k )) break ;
k =k+1;
}
if( k<=i/2)printf("%4d=%4d+%4d\n",i,k,i-k);
}
}
#include<stdio.h>
#include<math.h>
void Goldbach ( int a , int b );
int main ()
{
int n,m ;
printf ("请输入两个正整数( n < m ):");
scanf ("%d%d",& n ,& m );
if(n<m) Goldbach (n,m);
else Goldbach (m,n);
return 0;
}
int prime ( int n )
{
int i ,m = sqrt ( n );
for (i=2; i <= m ; i ++)
if ( n %i==0)
return 0;
return 1;
}
void Goldbach ( int a , int b )
{int i, k ;
for (i=a;i<=b;i++)
{k=3;
while(k<=i/2)
{if ( prime(k)*prime( i-k )) break ;
k =k+2;
}
if( k<=i/2)printf("%4d=%4d+%4d\n",i,k,i-k);
}
}