Pagini recente » Cod sursa (job #765297) | Cod sursa (job #841993) | Cod sursa (job #3127452) | Cod sursa (job #571677) | Cod sursa (job #806293)
Cod sursa(job #806293)
#include <stdio.h>
int div[20],expp[20],nd=0,i;
void desc(int n){
for(i=2;i*i<=n;i++){
if(n%i==0){
div[nd]=i;
while(n%i==0){
expp[nd]++;
n/=i;
}
nd++;
}
}
if(n!=1){
div[nd]=n;
expp[nd++]=1;
}
}
long long putere(long long n,int d){
long long s=0;
while(n>=d){
s=n/d+s;
n/=d;
}
return s;
}
int proprietate(long long x,int q){
int i;
for(i=0;i<nd;i++)
if(putere(x,div[i])<expp[i]*q)
return 1;
return 0;
}
int main(){
int nr,min,q;
long long j, pas;
FILE *fin,*fout;
fin=fopen("gfact.in","r");
fout=fopen("gfact.out","w");
fscanf(fin,"%d%d",&nr,&q);
if(nr==1)
fprintf(fout,"1");
else {
desc(nr);
pas=(long long)1<<60;
j=0;
while(pas!=0){
if(proprietate(j+pas,q)==1)
j+=pas;
pas/=2;
}
fprintf(fout,"%lld",1+j);
}
return 0;
}