Time Limit: 0.5 second(s) | Memory Limit: 32 MB |
Dr. Mob has just discovered a Deathly Bacteria. He named it RC-01. RC-01 has a very strange reproduction system. RC-01 lives exactly x days. Now RC-01 produces exactly p new deadly Bacteria where x = bp (where b, p are integers). More generally, x is a perfect pth power. Given the lifetime x of a mother RC-01 you are to determine the maximum number of new RC-01 which can be produced by the mother RC-01.
Input
Input starts with an integer T (≤ 50), denoting the number of test cases.
Each case starts with a line containing an integer x. You can assume that x will have magnitude at least 2 and be within the range of a 32 bit signed integer.
Output
For each case, print the case number and the largest integer p such that x is a perfect pth power.
Sample Input | Output for Sample Input |
3 17 1073741824 25 | Case 1: 1 Case 2: 30 Case 3: 2 |
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define LL long long
using namespace std;
struct node
{
int num;
int time;
}p[60];
int k;
void get(LL n)//分解质因子
{
k=0;
for(LL i=2;i*i<=n;i++)
{
if(n%i==0)
{
p[k].num=i;
int cnt=0;
while(n%i==0)
{
n=n/i;
cnt++;
}
p[k++].time=cnt;
}
}
if(n>1)
{
p[k].num=n;
p[k++].time=1;
}
}
bool judge(int x)
{
for(int i=0;i<k;i++)
{
if(p[i].time%x)
return false;
}
return true;
}
int main()
{
int t,m,x,i,j,cnt=1;
LL n;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);
bool flag=false;
if(n<0)//注意
{
n=-n;
flag=true;
}
get(n);
int ans;
if(flag)
{
for(i=32;i>=1;i--)
{
if(judge(i)&&i&1)
{
ans=i;
break;
}
}
}
else
{
for(i=32;i>=1;i--)
{
if(judge(i))
{
ans=i;
break;
}
}
}
printf("Case %d: %d\n",cnt++,ans);
}
return 0;
}