[中山市选] 完全平方数

来源:互联网 发布:excel数据筛选统计 编辑:程序博客网 时间:2024/05/16 19:08

方法:欧拉筛法 莫比乌斯函数


program number;const    maxt=50000;var    isprime:array[1..maxt]of boolean;    prime:array[1..maxt]of longint;    minu:array[1..maxt]of shortint;    total,test,n:longint;    ll,rr,mid:int64;procedure primemake;var    i,j:longint;begin    fillchar(isprime,sizeof(isprime),true);    for i:=2 to maxt do begin    if isprime[i] then begin        inc(total);        prime[total]:=i;        minu[i]:=-1;    end;    for j:=1 to total do begin            if prime[j]*i>maxt then break;        isprime[prime[j]*i]:=false;        minu[prime[j]*i]:=-minu[i];        if i mod prime[j]=0 then begin        minu[prime[j]*i]:=0;            break;        end;    end;    end;end;function get(const n:longint):int64;var i:longint;begin    get:=n;    for i:=1 to trunc(sqrt(n)) do get:=get+minu[i]*(n div sqr(i));end;begin    readln(test); primemake;    for test:=1 to test do begin    readln(n);    if n=1 then begin writeln(1); continue; end;    ll:=1;rr:=n<<1+1;    while ll+1<rr do begin        mid:=(ll+rr)>>1;        if get(mid)<n then ll:=mid else rr:=mid;    end;    writeln(rr);    end;end.