Pagini recente » Cod sursa (job #1545478) | Cod sursa (job #1356155) | Cod sursa (job #2847375) | Cod sursa (job #1044020) | Cod sursa (job #353471)
Cod sursa(job #353471)
#include<cstdio>
long long v[1000];
long long c[1000];
long long n2;
void descompunere(long long p)
{
if (p%2==0) v[++v[0]]=2;
while (p%2==0)
{
c[v[0]]++;
p/=2;
}
for (long long i=3;i*i<=p;i+=2)
{
if (p%i==0)
v[++v[0]]=i;
while (p%i==0)
{
c[v[0]]++;
p/=i;
}
}
if (p>1)
{
v[++v[0]]=p;
c[v[0]]=1;
}
c[0]=v[0];
}
bool nrz( long long n, long long a, long long b)//verific daca a (prim) apare la o putere >=b in desc lui n!
{
long long b2=0;
while(n)
b2 += (n/=a);
return b2>=b;
}
bool div( long long n)
{
for (long long i=1;i<=v[0];i++)
if (!nrz(n,v[i],c[i]) ) return 0;
return 1;
}
long long caut()
{
long long i,pas=(long long)1<<60;
for (i=0;pas;pas>>=1)
if (!div(i+pas) ) i+=pas;
return i+1;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
long long p,q;
scanf("%lld%lld", &p , &q);
descompunere(p);
for (long long i=1;i<=v[0];i++)
c[i]*=q;
n2=p;
long long c2=caut();
printf("%lld", c2);
return 0;
}