Pagini recente » Cod sursa (job #99556) | Cod sursa (job #2736710) | Cod sursa (job #1542511) | Cod sursa (job #833573) | Cod sursa (job #1853482)
#include <fstream>
using namespace std;
ifstream fin ("gfact.in");
ofstream fout ("gfact.out");
int p,q,nr,d,e,k,i,j,st,dr,mid,v[1001],ex[1001],m,ap,b,ok;
int main (){
fin>>p>>q;
d = 2;
nr = p;
while (nr!=1 && d*d<=nr){
e = 0;
while (nr%d==0){
nr/=d;
e++;
}
if (e!=0){
v[++k] = d;
ex[k] = e*q;
}
d++;
}
if (nr != 1){
v[++k] = nr;
ex[k] = q;
}
st = 1;
dr = 2000000000;
while (st<=dr){
m = (st+dr)/2;
ok = 0;
for (i=1;i<=k;i++){
nr = v[i]; // al i-lea factor din descompunerea in factori primi
ap = 0;
while (nr<=m){
ap += m/nr;// numaram de cate ori apar
if (nr <= m/v[i]){
nr *= v[i];
}
else
break;
}
if (ap < ex[i]){
ok = 1;
break;
}
}
if (ok == 0){
dr = m-1;
}
else
st = m+1;
// il descompunem pe m in facori primi;
/*nr = m;
d = 2;
while (nr != 0 && d*d<=nr){
e = 0;
while (nr % d ==0){
nr/=d;
e++;
}
if (e!=0){
if (e > v[])
}
d++;
}
*/
}
fout<<st;
/* b = 1;
for (i=1;i<=k;i++){
// cautam binar
st = 1;
dr = v[i]*ex[i];
while (st<=dr){
m = (st+dr)/2;
nr = m;
ap = 0;
while (nr%v[i]==0){
nr/=v[i];
ap++;
}
if (ap <= ex[i])
st = m+1;
else
dr = m-1;
}
b *= st;
}
fout<<b;
*/
return 0;
}