Pagini recente » Cod sursa (job #854426) | Cod sursa (job #2272811) | Cod sursa (job #2368267) | Cod sursa (job #151669) | Cod sursa (job #2382396)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int dp[20],e[20],p,q,ndp;
long long np,pas,r;
void desc(int n){
int d=2;
while(d*d<=n){
if(n%d==0){
dp[ndp]=d;
while(n%d==0){
e[ndp]++;
n/=d;
}
ndp++;
}
d++;
}
if(n>1){
dp[np]=n;
e[np]=1;
ndp++;
}
}
long long putere_fact(long long n, int d){
long long nr=0;
while(n>=d){
nr+=n/d;
n/=d;
}
return nr;
}
bool se_divide(long long n){
for(int i=0;i<ndp;i++){
if(putere_fact(n,dp[i])<e[i]*q){
return false;
}
}
return true;
}
int main(){
FILE *fin,*fout;
fin=fopen("gfact.in","r");
fout=fopen("gfact.out","w");
fscanf(fin,"%d%d",&p,&q);
desc(p);
r=0;
pas=1ll<<35;
while(pas!=0){
if(!se_divide(r+pas)){
r+=pas;
}
pas/=2;
}
fprintf(fout,"%lld",r+1);
fclose(fin);
fclose(fout);
return 0;
}