质因数分解
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdio>
using namespace std;
int a[1005]; //质因子
int b[1005]; //质因子的个数
const int maxn = 1e6+5;
bool p[maxn];
long long prime[maxn/10];
int m;
int num;
int gcd(int a,int b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
void fenjie(long long x)//质因数分解
{
num = 0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=0; prime[i]*prime[i]<=x; i++)
{
if(x%prime[i]==0)
{
a[num] = prime[i];
while(x%prime[i]==0)
{
b[num]++;
x/=prime[i];
}
num++;
}
}
if(x!=1)
{
a[num] = x;
b[num++] = 1;
}
}
int main()
{
m = 0;
memset(p,true,sizeof(p));
p[0] = p[1] = false;
for(long long i=2; i<maxn; i++)
{
if(p[i])
{
prime[m++] = i;
for(long long j=i*i; j<maxn; j+=i)
p[j] = false;
}
}
int t;
cin>>t;
int j=1;
while(t--)
{
long long x;
cin>>x;
bool flag=true;
if(x<0)
{
x=-x;
flag=false;
}
fenjie(x);
int cnt=b[0];
if(flag==0)
{
if(cnt%2==0)
{
while(cnt%2==0)
{
cnt/=2;
}
}
}
else
{
for(int i=1;i<num;i++)
{
cnt=gcd(cnt,b[i]);
}
}
cout<<"Case "<<j<<": "<<cnt<<endl;
j++;
}
return 0;
}