有6个WA,发现就是pow(mid,3)不对,改成midmidmid就对了。为什么?
#include <bits/stdc++.h>
using namespace std;
int zs[40000];
long long z[4000];
long long bas=32000;
int main(){
long long n;
cin>>n;
int t=0;
zs[0]=zs[1]=1;
for(int i=2;i<=32000;i++)
{
if(zs[i]==0)
{
z[t]=i;
t++;
}
for(int j=0;j<t&&z[j]*i<=32000;j++)
{
zs[z[j]*i]=1;
if(i%z[j]==0) break;
}
}
long long x;
int sum;
long long maxx;
long long l,r,mid,res;
for(int i=0;i<n;i++)
{
cin>>x;
maxx=1;
for(int j=0;j<t;j++)
{
sum=0;
if(x<z[j]*z[j]*z[j]) break;
while(x%z[j]==0&&x>=z[j])
{
x/=z[j];
sum++;
if(sum%3==0)
{
maxx*=z[j];
}
}
}
if(x>bas*bas*bas)
{
l=bas+1;
r=1e6;
while(l<=r)
{
mid=(l+r)/2;
res=pow(mid,3);
if(res>=x) r=mid-1;
else l=mid+1;
}
if(l*l*l==x) maxx*=l;
}
cout<<maxx<<endl;
}
return 0;
}