Pagini recente » Cod sursa (job #303627) | Cod sursa (job #291671) | Cod sursa (job #1472757) | Cod sursa (job #981149) | Cod sursa (job #1700355)
#include <stdio.h>
#include <iostream>
using namespace std;
long long d[20] , e[20] , nd=0, p ,q;
FILE *in, *out;
void desc(){
int i=2;
while(i*i <= p){
if(p%i == 0){
d[++nd] = i;
while(p%i == 0){
e[nd]++;
p /= i;
}
}
i++;
}
if(p != 1){
d[++nd] = p;
e[nd] = 1;
}
}
long long putere(long long n, long long d){
long long r = 0;
while (n >= d)
{
r += n / d;
n /= d;
}
return r;
}
bool ok(long long n){
long long r;
for(int i=1;i<=nd;i++){
r = putere(n , d[i]);
if(r<e[i] * q) return false;
}
return true;
}
long long rez(){
long long i=0 , pas = (1LL << 60LL);
while(pas != 0){
if(!ok(i+pas)) i+=pas;
pas/=2;
}
return 1+i;
}
int main()
{
in = fopen("gfact.in" , "r");
fscanf(in , "%d%d" , &p , &q);
fclose(in);
desc();
out = fopen("gfact.out" , "w");
fprintf(out , "%d" , rez());
fclose(out);
return 0;
}