第三届程序设计大赛 哥德巴赫猜想

第三届程序设计大赛 哥德巴赫猜想

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_40789841/article/details/80967002