Pagini recente » Cod sursa (job #835670) | Cod sursa (job #252942) | Cod sursa (job #1237698) | Cod sursa (job #2419932) | Cod sursa (job #2282738)
#include <iostream>
#include <stdio.h>
#define ND 10
#define L 45
using namespace std;
int vd[ND], vp[ND], nd, p , q;
void descompunere( int n ) {
int d = 2;
while( d * d <= n ) {
if( n % d == 0 ) {
vd[nd] = d;
while( n % d == 0 ) {
vp[nd]++;
n /= d;
}
nd++;
}
d++;
}
if( n > 1 ) {
vd[nd] = n;
vp[nd++] = 1;
}
}
long long putere( long long n, int put ) {
long long r = 0;
while( n >= put ) {
r += n / p;
n /= p;
}
return r;
}
bool divfact( long long n ) {
for( int i = 0; i < nd; i++ ) {
if( putere(n, vd[i]) < vp[i] * q ) {
return false;
}
}
return true;
}
long long cautbin() {
long long r = 0, pas = 1LL << L;
while( pas != 0 ) {
if( !divfact(r + pas) ) {
r += pas;
}
pas /= 2;
}
r++;
return r;
}
int main() {
FILE *fin, *fout;
fin = fopen( "gfact.in", "r" );
fout = fopen( "gfact.out", "w" );
fscanf( fin, "%d%d", &p, &q );
descompunere( p );
fprintf( fout, "%lld", cautbin() );
fclose( fout );
return 0;
}