HDU 4715题解

来源:互联网 发布:农村淘宝网点查询系统 编辑:程序博客网 时间:2024/04/29 03:30

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4715

这道题目就是打一个大概是三倍的素数表,就能解决的问题,但是却一直WA,原来是因为有负数的情况;

AC代码:

#include<stdio.h>#include<string.h>#define MAX 2000009int pm[1000000],mark[MAX];int prime(){    memset(mark,0,sizeof(mark));    int count=0;    for(int i=2;i<MAX;i++){        if(mark[i]==0){            pm[count++]=i;            for(int j=2*i;j<MAX;j+=i){                mark[j]=1;            }        }    }return count;}int main(){    int T,n;    int len=prime();    while(~scanf("%d",&T)){        while(T--){            scanf("%d",&n);            int pre,pos;            int fk=0;            if(n<0){                n=-n;                fk=1;            }            int visit=0;            for(int i=0;i<len;i++){                if(pm[i]+n<=pm[len-1]&&mark[pm[i]+n]==0){                    pre=pm[i]+n;                    pos=pm[i];                    //printf("%d %d\n",pm[i]+n,pm[i]);                    visit=1;                    break;                }            }            if(visit==1){                if(fk==1) printf("%d %d\n",pos,pre);                else printf("%d %d\n",pre,pos);            }            else printf("FAIL\n");        }    }return 0;}