HDU 1397 Goldbach's Conjecture(二分,查找素数)

时间:2023-03-09 17:36:32
HDU 1397 Goldbach's Conjecture(二分,查找素数)

题目意思很简单,就是找n=p1+p2的种类数,具体看题目吧。

次重点是查找一定范围内的素数;

重点是用二分查找,不然会超时!!!

#include<stdio.h>
#include<string.h> int main()
{
int n,i,f,j,a[],num,s,l,r,mid;
a[]=;s=;
for(i=;i<;i=i+)//这里是打出素数
{
f=;
for(j=;j<s;j++)
{
if(a[j]*a[j]>i)
break;
if(i%a[j]==)
{
f=;
break;
}
}
if(f==)
a[s++]=i;
}
while(scanf("%d",&n),n)
{
num=;
for(i=;a[i]*<=n;i++)
{
l=;r=s;
while(r>l)//查找时一定要用2分啊!不然超时超到哭!!
{
mid=(r+l)/;
if(a[i]+a[mid]==n)
{
num++;
break;
}
if(a[i]+a[mid]<n)
l=mid+;
if(a[i]+a[mid]>n)
r=mid;
}
}
printf("%d\n",num);
}
return ;
}