验证哥德巴赫猜想之一—— 2000以内的正偶数(c作业)

题目内容:

编写程序:验证哥德巴赫猜想之一—— 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

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页