Pagini recente » Cod sursa (job #1173465) | Cod sursa (job #1287697) | Cod sursa (job #2211686) | Cod sursa (job #2081417) | Cod sursa (job #2282742)
#include <fstream>
#define ND 10
#define L 45
using namespace std;
ifstream in ("gfact.in");
ofstream out ("gfact.out");
int p,q,d[ND],e[ND],nd;
void descompunere(int n)
{
int div=2;
while(div*div<=n)
{
if(n%div==0)
{
d[nd] = div;
while(n % div == 0)
{
e[nd]++;
n/=div;
}
nd++;
}
div++;
}
if(n > 1)
{
d[nd] = n;
e[nd++]=1;
}
}
long long putere(long long n,int p)
{
/*
returneaza puterea la care pot sa il ridi pe p a.i.
sa-l divida pe n!
*/
long long r = 0;
while(n >= p)
{
r += n / p;
n /= p;
}
return r;
}
bool divfact(long long hatz)
{
//verific daca n! este divizibil cu p^q folosind d si e
for(int i=0; i < nd; i++)
{
if(putere(hatz,d[i]) < e[i] * q)
return false;
}
return true;
}
long long cautb()
{
long long r=0,pas = 1LL << L;
while(pas)
{
if(!divfact(r+pas))
r += pas;
pas >>= 1;
}
return r+1;
}
int main()
{
in>>p>>q;
in.close();
descompunere(p);
out<<cautb();
out.close();
return 0;
}