给出x=b^p要让p尽量大。给出的x范围为负。
质因数分解,然后计算幂指数间的最大公约数。如果是负数结果不能为偶数
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <utility>
#include <algorithm>
using namespace std;
const int maxn=1e6+5;
int len=0;
long long prime[maxn];
bool status[maxn];
void makeprime()
{
for(int i=2; i<=maxn; i++)
{
if(!status[i]) prime[len++]=i;
for(int j=0; j<len&&i*prime[j]<=maxn; j++)
{
status[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
}
int gcd(int a,int b)
{
return (b==0)?a:gcd(b,a%b);
}
int main()
{
makeprime();
int t;
scanf("%d",&t);
for(int j=1; j<=t; j++)
{
long long n;
int ans=0,flag=0;
scanf("%lld",&n);
if(n<0) flag=1,n=-n;
for(int i=0; i<len&&prime[i]<=n; i++)
{
int c=0;
while(n%prime[i]==0)
{
c++;
n/=prime[i];
}
if(c>0)
{
if(ans==0) ans=c;
else ans=gcd(c,ans);
}
}
if(n>1) ans=gcd(1,ans);
if(flag==1) while(ans%2==0) ans/=2;
printf("Case %d: %d\n",j,ans);
}
return 0;
}
/**
-2147483648
*/