long long res=pow(mid,3); 为啥不对?
查看原帖
long long res=pow(mid,3); 为啥不对?
776599
jping楼主2023/1/29 18:01

有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;
} 
2023/1/29 18:01
加载中...