Mai intai trebuie sa te autentifici.
Cod sursa(job #2565036)
Utilizator | Data | 2 martie 2020 11:45:47 | |
---|---|---|---|
Problema | GFact | Scor | 90 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.05 kb |
#include<fstream>
#include<iostream>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
long long st,dr,mi,p,q,poz;
long long v[15],nrfact,k[15];
long long putere(long long f,long long nr)
{
long long put=f,s=0;
while(put<=nr)
{
s+=nr/put;
put*=f;
}
return s;
}
bool good(long long nr)
{
for(long long i=1;i<=nrfact;i++)
if(k[i]>putere(v[i],nr))
return 0;
return 1;
}
int main()
{
fin>>p>>q;
for(long long d=2;d*d<=p;d+=d%2+1)
{
if(p%d==0)
{
v[++nrfact]=d;
while(p%d==0)
{
p/=d;
k[nrfact]++;
}
k[nrfact]*=q;
}
}
if(p>1)
{k[++nrfact]=q;
v[nrfact]=p;}
long long nr=2000000000;
st=1;
dr=nr;
while(st<=dr)
{
mi=(st+dr)/2;
if(good(mi))
{
dr=mi-1;
poz=mi;
}
else st=mi+1;
}
fout<<poz;
}