Pagini recente » Cod sursa (job #2055147) | Cod sursa (job #2073948) | Cod sursa (job #2080792) | Cod sursa (job #2685535) | Cod sursa (job #1804247)
#include <stdio.h>
#include <stdlib.h>
int prim[10], ex[10], nr;
void facprim(int n){
int div=2, e;
while(div*div<=n){
if(n%div==0){
prim[nr]=div;
e=0;
while(n%div==0){
n/=div;
e++;
}
ex[nr]=e;
nr++;
}
div++;
}
if(n!=1){
prim[nr]=n;
ex[nr]=1;
nr++;
}
}
long long baga(long long n, long long div){
long long divc=div, s=0;
while(div<=n && div!=0){
s+=n/div;
div*=divc;
}
return s;
}
int da(long long n){
int i, da=1;
for(i=0;i<nr;i++)
if(baga(n, prim[i])<ex[i])
da=0;
return da;
}
long long calc(){
long long poz, pas;
poz=1;
pas=1LL<<60;
while(pas!=0){
if(da(poz+pas)==0)
poz+=pas;
pas/=2;
}
poz++;
return poz;
}
int main(){
FILE *fin, *fout;
int p, q, i;
fin=fopen("gfact.in", "r");
fout=fopen("gfact.out", "w");
fscanf(fin, "%d%d", &p, &q);
nr=0;
facprim(p);
for(i=0;i<nr;i++)
ex[i]*=q;
fprintf(fout, "%lld", calc());
fclose(fin);
fclose(fout);
return 0;
}