Pagini recente » Cod sursa (job #3166250) | Cod sursa (job #2936726) | Cod sursa (job #542338) | Cod sursa (job #2982369) | Cod sursa (job #1125496)
#include<stdio.h>
#include<math.h>
FILE *f=fopen("gfact.in","r"), *g=fopen("gfact.out","w");
struct descompunere{
long int b, e;
} v[30];
long int P, Q, Hv=0;
void CitDesc(){
long int i, Prad, Pin;
fscanf(f,"%ld %ld\n",&P,&Q); Pin=P;
Prad= sqrt(P);
for(i=2;i<=Prad;i++){
if( P%i==0 ){
v[++Hv].b=i;
while(P%i==0) { v[Hv].e++; P/=i; }
}
}
if(P>1){ Hv++; v[Hv].b=P; v[Hv].e=1; } P=Pin;
for(i=1;i<=Hv;i++)
v[i].e *= Q;
}
bool verif( long long int nr ){
long long int t, j;
long int i;
for(i=1;i<=Hv;i++){
t=0;
j= v[i].b;
while( j<=nr ){ t+= (nr/j); j*=v[i].b; }
if( t< (1LL * v[i].e) ) return 0;
}
return 1;
}
void CautBinar(){
long long int p, u, mij;
p= 1LL * v[Hv].b; u= 1LL * P * Q;
while( p<=u ){
mij= (p+u)/2;
if( verif(mij) ) u = mij-1;
else p = mij+1;
}
fprintf(g,"%lld\n",p);
}
int main(){
CitDesc();
CautBinar();
return 0;
}