Hdu 5750 Dertouzos

来源:互联网 发布:淘宝左侧客服模板代码 编辑:程序博客网 时间:2024/06/10 01:31

BC的时候听说这个题卡时限以为会FST,没想到居然过了
赛后看了一下我的时间复杂度居然是O(T×min(np,rank(p)+1))
(rank(p)p的最小素因子在素数表的下标,即rank(9) =2 ,rank(4) = 1,rank(35)=3
(这个函数是我现造的。。


感觉也是十分的神奇

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 1123456;bool vis[maxn];int pri[maxn],plen;int sieve(){    memset(vis,0,sizeof(vis));    plen = 0;    for(int i=2;i<maxn;i++){        if(vis[i] == false){            pri[plen++] = i;            for(int j=i*2;j<maxn;j+=i)                vis[j] = true;        }    }    return plen;}int main(){    int v = sieve();    int T;    scanf("%d",&T);    int n,p;    while(T-- && ~scanf("%d %d",&n,&p)){        n--;        int t = n / p;        int pos = 1;        if(t <= 1){            puts("0");            continue;        }        if(p%2==0) pos = p*2<=n;        else            while(pri[pos] <= t && p%pri[pos-1]!=0 && pos < v)                pos++;        printf("%d\n",pos);    }    return 0;}
0 0