Pagini recente » Cod sursa (job #2795657) | Cod sursa (job #2338691) | Cod sursa (job #2970396) | Cod sursa (job #2327594) | Cod sursa (job #1252498)
#include <stdio.h>
#define INF 8000000000000000000LL
#define MAXK 9
int e[MAXK], p[MAXK], k;
inline void desc(int n){
int d;
k=0;
d=2;
while(1LL*d*d<=n){
if(n%d==0){
p[k]=d;
while(n%d==0){
n/=d;
e[k]++;
}
k++;
}
d++;
}
if(n!=1){
p[k]=n;
e[k]=1;
k++;
}
}
inline long long legendre(long long n, int d){
long long s, x;
s=0;
x=d;
while(x<=n){
s+=n/x;
x*=1LL*d;
}
return s;
}
inline long long exp(long long n){
int i;
long long min, x;
min=INF;
for(i=0; i<k; i++){
x=legendre(n, p[i])/e[i];
if(x<min){
min=x;
}
}
return min;
}
int main(){
long long rez, pas;
int q, n;
FILE *fin, *fout;
fin=fopen("gfact.in", "r");
fout=fopen("gfact.out", "w");
fscanf(fin, "%d%d", &n, &q);
desc(n);
rez=0;
pas=1<<30;
for(pas=pas<<15; pas!=0; pas>>=1){
if(exp(rez+pas)<q){
rez+=pas;
}
}
fprintf(fout, "%lld\n", rez+1LL);
fclose(fin);
fclose(fout);
return 0;
}