请教验证歌德巴赫猜想的算法优化问题
这是OJ平台上的一道题题目如下:
验证歌德巴赫猜想
要求:Time Limit: 400/200 MS (Java/Others) Memory Limit: 32768/5000 K (Java/Others)
我自己写了一份代码,用的是筛选法求素数,但提交后还是Time Limit Exceeded,是筛选法还不够优化还是我后面那个输出的方法不够好,或者我的代码中有哪些不足或不妥的地方,请各位大神不吝指出,谢谢
以下是本人的代码:
#include<stdio.h>
int main()
{
int n,i,t,p,q,a[10001],k,w;
while(scanf("%d",&n)==1)//用筛选法求出所有素数
{
t=1;
a[1]=2;
for(i=3; i<=n; i++)
{
if(i%2!=0)
{
t++;
a[t]=i;
}
}
for(p=1; p<t; p++)
{
if(a[p]!=0)
for(q=p+1; q<=t; q++)
{
if(a[q]%a[p]==0)
a[q]=0;
}
}
k=0;
if(t%2!=0)//将a[t]一分为二,前部分为较小数,后部分为较大数
w=t/2+1;
else
w=t/2;
for(p=w; p>=1; p--)//思路是"用较小数中的最大数"加上"较大数中的最小数",不满足判断条件的话,较大数中的最小数再往后变大
{
if(a[p]!=0)
{
for(q=w; q<=t; q++)
if(a[q]!=0)
{
if(a[p]+a[q]==n)
{
printf("%d %d\n",a[p],a[q]);
k=1;
break;
}
}
}
if(k==1)
break;
}
}
return 0;
}