Pagini recente » Cod sursa (job #1843498) | Cod sursa (job #2746466) | Cod sursa (job #165306) | Rating Vlad Andrei Raducan (andreivlad) | Cod sursa (job #2282736)
#include <fstream>
using namespace std;
ifstream in ("gfact.in");
ofstream out ("gfact.out");
const int ND=10,L=45;
int p,q,d[ND],e[ND],nd;
void descompunere (int n)
{
int dv=2;
while (dv*dv<=n)
{
if (n%dv==0)
{
d[nd]=dv;
while (n%dv==0)
{
e[nd]++;
n/=dv;
}
nd++;
}
dv++;
}
if (n>1)
{
d[nd]=n;
e[nd++]=1;
}
}
long long putere (long long n,int p)
{
long long r=0;
while (n>=p)
{
r+=n/p;
n/=p;
}
return r;
}
bool divfact (long long n)
{
for (int i=0;i<nd;i++)
{
if (putere (n,d[i])<e[i]*q)
{
return false;
}
}
return true;
}
long long cautb ()
{
long long r=2,pas=1LL<<L;
while (pas!=0)
{
if (!divfact(r+pas))
{
r+=pas;
}
pas/=2;
}
r++;
return r;
}
int main()
{
in >>p>>q;
descompunere(p);
out<<cautb();
return 0;
}