您的位置:首页 > 其它

UVA10650 - Determinate Prime - 数论

2014-08-02 15:55 357 查看
#include<stdio.h>
#include<string.h>
int visit[32005];
int mark[32005];
int a[32005];
void pr()
{
int i,j;
memset(visit,0,sizeof(visit));
int num=0;
for(i=2;i<=32004;i++)
{
if(visit[i]==0)
{
num++;
a[num]=i;
}
for(j=1;((j<=num)&&(i*a[j]<=32004));j++)
{
visit[i*a[j]]=1;
if(i%a[j]==0)
{
break;
}
}
}
}
int main()
{
int m,n;
pr();
int i,j;
int flag;
while(scanf("%d%d",&n,&m)!=EOF)
{
int time=0;
if(n==0&&m==0)
{
break;
}
if(n>m)
{
int t;
t=n;
n=m;
m=t;
}
memset(mark,0,sizeof(mark));
for(i=0;a[i+2]<=m;i++)
{
flag=0;
if(a[i]<n)
{
continue;
}
for(j=0;a[j]<=m;j++)
{
if(a[i+j+1]>m||a[i+j+2]>m)
{
break;
}
if((a[i+j+1]-a[i+j])==(a[i+j+2]-a[i+j+1]))
{
if(a[i+j+3]-a[i+j+2]==a[i+j+2]-a[i+j+1]&&(a[i+j+3]>m))
{
break;
}
if(a[i+j+2]-a[i+j+1]==a[i+j]-a[i+j-1]&&(a[i+j-1]<n))
{
break;
}
if(mark[i+j]==0&&j==0)
{
printf("%d",a[i+j]);
flag=1;
}
else if(mark[i+j]==0)
{
printf(" %d",a[i+j]);
}
if(mark[i+j]==1&&(a[i+j+1]-a[i+j])!=(a[i+j]-a[i+j-1]))
{
printf("%d",a[i+j]);
flag=1;
}
if(mark[i+j+1]==0)
{
printf(" %d",a[i+j+1]);
}
if(mark[i+j+2]==0)
{
printf(" %d",a[i+j+2]);
}
mark[i+j]=mark[i+j+1]=mark[i+j+2]=1;
}
else
{
break;
}
}
if(flag==1)
{
puts("");
}
}
}
}



这道题坑比较多,重点是4个数字的时候,第一个数超限就不输出后三个,同理,最后一个数超限不输出前三个

比如

251 269的时候输出4个

那么252 269不输出

251 268也不输出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: