Pagini recente » Cod sursa (job #1367674) | Cod sursa (job #1174199) | Cod sursa (job #1405096) | Cod sursa (job #3135323) | Cod sursa (job #472826)
Cod sursa(job #472826)
#include<fstream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int p,q,di[20],po[20],nr=0;
void mat(int n)
{
int i;
for(i=2;i*i<=n;i++)
if(n%i==0)
{
di[++nr]=i;
while(n%i==0)
{
++po[nr];
n/=i;
}
}
if(n!=1)
{
di[++nr]=n;
po[nr]=1;
}
}
long long putere(long long n,int p)//calculeaza puterea la care apare p in n! (p este prim)
{
long long s=0;
while(n/p!=0)
{
s+=n/p;
n/=p;
}
return s;
}
bool ok(long long n)
{
for(int i=1 ; i<=nr ; ++i)
if(putere(n,di[i])<q*po[i])
return false;
return true;
}
long long caut()
{
long long i,pas=(long long)1<<60;
for(i=0;pas!=0;pas/=2)
if(!ok(i+pas))
i += pas;
return 1+i;
}
int main()
{
in>>p>>q;
mat(p);
out<<caut()<<'\n';
return 0;
}