求助!
查看原帖
求助!
556362
Unnamed114514楼主2021/9/16 22:58

已经调了三天,调疯了,全输出1。

#include<bits/stdc++.h>
using namespace std;
const int Maxn=pow(10,4.5),Maxm=1e6;
int n,ans[Maxn+5],cnt,p[Maxm+5];
bool prime[Maxn+5];
long long x;
void Prime(int n){
	for(int i=2;i<=n;i++){
		if(!prime[i])
			ans[++cnt]=i;
		for(int j=1;j<=cnt&&i*ans[j]<=n;j++){
			prime[i*ans[j]]=1;
			if(!(i%ans[j]))
				break;
		}
	}
}
int main(){
	scanf("%d",&n);
	Prime(Maxn);
	for(long long i=1;i*i*i<=1e18&&i<=Maxm;i++)
		p[i]=i*i*i;
	while(n--){
		long long sum=1;
		scanf("%lld",&x);
		for(long long i=1;i<=cnt&&ans[cnt]<=x;i++){
			int count=0;
			while(!(x%ans[i])){
				count++;
				x/=ans[i];
				if(count==3){
					sum*=ans[i];
					count=0;
				}
			}
		}
		long long k=lower_bound(p+1,p+Maxm+1,x)-p;
		printf("%lld\n", sum*(k*k*k==x?k:1));
	}
	return 0;
}
2021/9/16 22:58
加载中...