HDU2521反素数

只是了解下这种简单的数论定义,解释可以戳这个

http://www.cnblogs.com/Findxiaoxun/p/3460450.html

,然后按Ctrl+ F搜索   反素数  ,找到那一部分看一看就行。

#include<cstdio>

#include<algorithm>

#include<cstring>

#include<cmath>

using namespace std;

//const int MAXN=500000+5;

const int MAXN=5005;

bool prime[MAXN];

int ans[MAXN];

int n;

void predeal(){

    prime[0]=prime[1]=false;

    for(int i=3;i<MAXN-4;i++)

        if(i%2==0)prime[i]=0;//not prime

        else prime[i]=1;

    prime[2]=true;

    for(int i=3;i<sqrt(MAXN-4);i++){

        if(prime[i])

        for(int j=i+i;j<MAXN-4;j+=i)prime[j]=false;

    }



}

void emirp(){

    ans[1]=1;

    for(int i=2;i<MAXN-4;i++){

        ans[i]=1;

        int pj=2,j=i;

        while(j>1){

            while(!prime[pj])pj++;

            int num=0;

            while(j%pj==0 && j>0){num++;j/=pj;}

            pj++;

            ans[i]*=num+1;

        }

    }

}

int judge(int left,int right){

    int maxvalue=-1,maxid=-1;

    for(int i=left;i<=right;i++){

        if(ans[i]>maxvalue){

            maxvalue=ans[i];

            maxid=i;

        }

    }

    return maxid;

}

int main(){

    int a,b;

    predeal();

    emirp();

    scanf("%d",&n);

    while(n--){

        scanf("%d%d",&a,&b);

        printf("%d\n",judge(a,b));

    }

    return 0;

}

 

  

你可能感兴趣的:(HDU)