poj2262筛子法素数打表

素数打表:

void oddp()

{

	int i,j;

	for(i=0;i<1000000;i++) a[i]=1;

	a[0]=0; a[1]=0;

	for(i=2;i<1000000;i++)

	{

		if(a[i]==1)

		{

			for(j=i*2;j<1000000;j+=i) a[j]=0;

		}

	}

}

结合POJ2262代码:

int main()

{

	int num;

	int i,flag;

	oddp();

	while(scanf("%d",&num)!=EOF&&num!=0)

	{

		for(flag=0,i=2;i<num;i++)

		{

			if(a[i]==1&&a[num-i]==1)

			{

				printf("%d = %d + %d\n",num,i,num-i);

				flag=1;

				break;

			}

		}

		if(flag==0)

			printf("Goldbach's conjecture is wrong.\n");

	}

	return 0;

}

   瓶颈就在这里,之前用的是O(n^2),这里的时间复杂度O(n),速度大大提升了,因此不会超时而通过了。

    这到题的收获是,铸聪师兄教会我算时间复杂度,和筛子法求素数打表。在这里感谢师兄不厌其烦地给我分析,讲解,谢谢师兄!

 

你可能感兴趣的:(poj)