题目内容:
编写程序:验证哥德巴赫猜想之一—— 2000以内的正偶数(大于等于4)都能够分解为两个质数之和。每个偶数表达成形如:4=2+2的形式,请每行输出4个偶数及其分解结果。
提示:每一个偶数可能存在多种分解表达形式,但是只要求出第一种分解就停止求其他分解,
输出结果中每一个偶数只给出一种分解的表达
输入格式:
无
输出格式:
单个表达式用以下格式字符串输出:
“%4d=%4d+%4d”
每行输出4个,每个表达式的后面要输出一个空格与后面的表达式进行分割,但本行的第4个表达式后不能有空格,要直接换行。
注意:最后一行输出有可能不足4个表达式,则该行最后一个表达式的后面仍然要输出一个空格。
输入样例:
无
输出样例:
4= 2+ 2 6= 3+ 3 8= 3+ 5 10= 3+ 7
12= 5+ 7 14= 3+ 11 16= 3+ 13 18= 5+ 13
20= 3+ 17 22= 3+ 19 24= 5+ 19 26= 3+ 23
……
1980= 7+1973 1982= 3+1979 1984= 5+1979 1986= 7+1979
1988= 37+1951 1990= 3+1987 1992= 5+1987 1994= 7+1987
1996= 3+1993 1998= 5+1993 2000= 3+1997
时间限制:500ms内存限制:32000kb
#include<stdio.h>
#include<math.h>
int primejudge(int a)
{
int i,j;
j=(int)sqrt(1.0*a);
for(i=2;i<=j;i++)
{
if(a%i==0) a=0;
}
if(a!=0) a=-1;
return a;
}
int main()
{
int a[2001],i=2,j=1,sum=0,m,k=0,t=0;
while(i<=2000)
{
if(primejudge(i)==-1)
{
a[j++]=i;
sum++;
}
i++;
}
for(m=4;m<=2000;m=m+2)
{
for(i=1;i<=sum;i++)
{
if(k==1)
{k=0;break;}
for(j=i;j<=sum;j++)
{
if(t==4)
{printf("\n");t=0;}
if(a[i]+a[j]==m)
{
printf("%4d=%4d+%4d",m,a[i],a[j]);
k=1;
t++;
if(t!=4)
{printf(" ");}
break;//停止遍历,降低时间复杂度
}
}
}
}
getchar();getchar();
return 0;
}
用例1通过 7ms 256kb