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),速度大大提升了,因此不会超时而通过了。
这到题的收获是,铸聪师兄教会我算时间复杂度,和筛子法求素数打表。在这里感谢师兄不厌其烦地给我分析,讲解,谢谢师兄!
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号