质因子无法通过取根号消去,最小只能是质因子相乘,次数为质因子的最大幂次,下一个2的幂次。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//typedef __int128 LL;
//typedef unsigned long long ull;
//#define F first
//#define S second
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<ld,ld> pdd;
const ld PI=acos(-1);
const ld eps=1e-9;
//unordered_map<int,int>mp;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const int seed=131;
const int M = 1e5+7;
int p[M],c[M];
int pm;
void divide(int n)
{
pm=0;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
p[++pm]=i,c[pm]=0;
while(n%i==0)n/=i,c[pm]++;
}
}
if(n>1)p[++pm]=n,c[pm]=1;//表示n是个质数
/* for(int i=1;i<=pm;i++)
cout<<p[i]<<" "<<c[i]<<endl;*/
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int x;
cin>>x;
if(x==1)
{
cout<<1<<" "<<0<<endl;
return 0;
}
divide(x);
int ma=0,ans=1;
bool fg=true;
c[0]=c[1];
for(int i=1;i<=pm;i++)
{
int f=0;
if(c[i]!=c[i-1])
fg=false;
for(int j=0;j<=29;j++)
{
int tp=1<<j;
if(c[i]>tp/2&&c[i]<=tp)
{
f=j;
break;
}
}
ma=max(f,ma);
ans*=p[i];
}
// cout<<ma<<" "<<fg<<endl;
int t;
bool ff=false;
for(int i=0;i<=29;i++)
{
t=1<<i;
if(t==c[1])ff=true;
}
//cout<<fg<<" "<<ff<<endl;
if(fg&&ff)ma--;
cout<<ans<<" "<<ma+1<<endl;
return 0;
}