Pagini recente » Cod sursa (job #3038571) | Cod sursa (job #1557510) | Cod sursa (job #2713388) | Cod sursa (job #218500) | Cod sursa (job #2784765)
#include <bits/stdc++.h>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
struct numere_descompuse{
long factor,expo;
} descP[100];
long long p,q,copie,expo,k,poz,i,st,dr,mij;
void desc()
{
copie=p;
expo=0;
while(copie % 2 == 0){
expo++;
copie/=2;
}
if(expo > 0){
descP[++k].factor = 2;
descP[k].expo = expo * q;
}
for(i=3;i<=sqrt(copie);i+=2){
expo=0;
while(copie%i==0)
{
expo++;
copie /= i;
}
if(expo > 0){
descP[++k].factor = i;
descP[k].expo = expo * q;
}
}
if(copie > 2){
descP[++k].factor = copie;
descP[k].expo = q;
}
}
long long put(long long factor,long long nr)
{
long long power = factor, rez = 0;
while(power <= nr){
rez += nr / power;
power *= factor;
}
return rez;
}
bool esteOk(long long x)
{
for(i=1;i<=k;i++)
if(descP[i].expo>put(descP[i].factor, x))
return 0;
return 1;
}
int main()
{
in>>p>>q;
desc();
st=1;
dr=((long long)1<<50);
while(st<=dr)
{
mij=(dr+st)/2;
if(esteOk(mij))
{
poz=mij;
dr=mij-1;
}
else
st=mij+1;
}
out<<poz;
return 0;
}