Pagini recente » Cod sursa (job #1875540) | Cod sursa (job #2026815) | Cod sursa (job #2689511) | Cod sursa (job #1385857) | Cod sursa (job #1844717)
#include <cstdio>
#define INF 1152921504606846976
using namespace std;
int v[50][2];
int verif (long long x,int elem){
int sum;
long long nr;
for (int i=1;i<=elem;i++){
nr=v[i][0];
sum=0;
while (nr<=x){
sum=sum+x/nr;
if (nr<=x/v[i][0])
nr*=v[i][0];
else break;
}
if (sum<v[i][1])
return 0;
}
return 1;
}
int main()
{
FILE *fin=fopen ("gfact.in","r");
FILE *fout=fopen ("gfact.out","w");
int p,q,d,elem;
long long st,dr,mid;
fscanf (fin,"%d%d",&p,&q);
d=2;
elem=0;
while (d*d<=p){
if (p%d==0){
v[++elem][0]=d;
while (p%d==0){
v[elem][1]+=q;
p/=d;
}
}
d++;
}
if (p!=1){
v[++elem][0]=p;
v[elem][1]=q;
}
st=1;
dr=5;
while (st<=dr){
if (st%2+dr%2==2)
mid=st/2 +dr/2 +1;
else mid= st/2 +dr/2;
if (verif(mid,elem))
dr=mid-1;
else st=mid+1;
}
fprintf (fout,"%lld",st);
return 0;
}