60pts求助
查看原帖
60pts求助
169594
Heart_Of_Iron_4楼主2023/8/29 12:03

rt

#include<bits/stdc++.h>
using namespace std;
#define int unsigned long long 
#define FOR(qw,we,er) for(int qw=we;qw<=er;++qw)
int n,x,t1,t2,t3,t4,p[11451],m;
bool b[35000];
int sqr(int qwe,int wer)
{
	int wert=pow(wer,1.0/qwe);
	wert++;
	if(wert*wert*wert<=wer)return wert;
	else return wert-1;
}
signed main()
{
	FOR(i,2,33000)
	{
		if(!b[i])
		{
			p[++m]=i;
			FOR(j,2,33000/i)
			{
				b[i*j]=1;
			}
		}
	}
	scanf("%lld",&n);
	while(n--)
	{
		scanf("%lld",&x);
		t1=sqr(4,x);//max:31000
		t2=1;//b
		t3=0;
		t4=1;//a
		FOR(i,1,m)
		{
			t3=0;
			if(p[i]>t1)break;
			while(x%p[i]==0)
			{
				t2*=p[i];
				x/=p[i];
				t3++;
			}
			while(t3>=3)
			{
				t3-=3;
				t4*=p[i];
				t2/=p[i]*p[i]*p[i];
			}
			if(x==1||x<p[i])break;
		}
		if(x!=1&&pow(sqr(3,x),3)==x)t4*=sqr(3,x);
		else t2*=x;
		x=1;
		printf("%lld\n",t4);
	}
	return 0;
}
2023/8/29 12:03
加载中...