Pagini recente » Cod sursa (job #2615258) | Cod sursa (job #891493) | Cod sursa (job #924695) | Cod sursa (job #3165157) | Cod sursa (job #3145096)
#include <fstream>
#include <map>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
//int f[10000000];//cati factori primi trebuie sa contina factorialul
map <long long, long long>f;
long long prim, divi=0;
long long q;
void Descompunere(long long n)
{
long long d=2, p;
while(n>1)
{
p=0;
if(n==d && divi==0)
{
prim=1;
break;
}
while(n%d==0)
{
p++;
n=n/d;
divi++;
}
if(d>44721)
{
prim=1;
break;
}
f[d]=p*q;
d++;
}
}
void Desc(long long n)
{
long long d=2, p, c=0;
while(n>1)
{
p=0;
if(n==d && c==0)
{
f[n]--;
if(f[n]>=0)
divi--;
break;
}
while(n%d==0)
{
p++;
n=n/d;
c++;
}
if(f[d]>=p)
divi-=p;
else if(f[d]>=0)
divi-=f[d];
f[d]-=p;
//divi-=p;
d++;
}
}
int main()
{
long long k=2, p;
in>>p>>q;
Descompunere(p);
if(p==1)
{
out<<1;
return 0;
}
if(prim==1)
{
long long m=1;
while(m*(m+1)/2<q)
{
m++;
}
out<<m*p;
return 0;
}
divi=divi*q;
//out<<divi<<endl;
while(divi>0)
{
Desc(k);
k++;
}k--;
out<<k;
}