第三届程序设计大赛 哥德巴赫猜想
Time Limit:1000MS Memory Limit:65536K
Total Submit:473 Accepted:249
Description
1742年,哥德巴赫在给好友欧拉的一封信里陈述了他著名的猜想——哥德巴赫猜想:任何一个大于4的偶数都是两个素数之和。
例如:
8=3+5,3和5都是素数。
20=3+17=7+13
42=5+37=11+31=13+29=19+23
你的任务是写出10000以内的哥德巴赫猜想。
Input
输入包含一组或多组测试数据。
测试数据每一行是一个偶数N(0 < N <= 10000)
输入数据以0为结束符,0不需要处理。
Output
对于每行测试数据,对应一行形式为N=a+b输出(a < b),a和b必须是素数。如果有多种结果,请输出b-a最大的一组。
Sample Input
8
20
42
0
Sample Output
8=3+5
20=3+17
42=5+37
slove:
#include <stdio.h>
#define maxNumber 10000
int main()
{
int n, N[n];
int i, j, k, l, x, isPrime[maxNumber], a[maxNumber], b[maxNumber];
for( i=0; ; n=++i )
{
scanf("%d", &N[i]);
if( N[i]==0 )
{
break;
}
}
for( i=0; i<maxNumber; i++ )
{
isPrime[i]=0;
}
for( x=2; x<maxNumber; x++ )
{
if( isPrime[x]==0 )
{
for( i=2; i*x<maxNumber; i++)
{
isPrime[i*x]=1;
}
}
}
for( i=2,j=0; i<maxNumber; i++ )
{
if( isPrime[i]==0 )
{
a[j]=b[j]=i;
l=++j;
}
}
for( i=0; i<n; i++ )
{
for( j=0; j<l; j++ )
{
for( k=0; k<l; k++ )
{
if( N[i]==a[j]+b[k] )
{
printf("%d=%d+%d\n", N[i], a[j],b[k] );
goto loop;
}
if( N[i]<a[j]+b[k] )
{
break;
}
}
}
loop:continue;
}
return 0;
}