Pagini recente » Cod sursa (job #734024) | Cod sursa (job #91873) | Cod sursa (job #2077517) | Cod sursa (job #415730) | Cod sursa (job #1301025)
#include <fstream>
using namespace std;
ifstream is("gfact.in");
ofstream os("gfact.out");
unsigned long long p, q;
int k;
int d[100], pow[100];
void Divizor(int n);
long long Caut_Bin();
bool OK(int v);
int main()
{
is >> p >> q;
Divizor(p);
/*
for ( int i = 1; i <= k; ++i )
os << d[i] << ' ' << pow[i] << '\n';
*/
os << Caut_Bin();
is.close();
os.close();
return 0;
}
void Divizor(int n)
{
for ( int i = 2; i*i <= n; ++i )
if ( n % i == 0 )
{
d[++k] = i;
while ( n % i == 0 )
{
n /= i;
pow[k]++;
}
}
if ( n != 1 )
{
d[++k] = n;
pow[k] = 1;
}
}
long long Caut_Bin()
{
long long poz = 1;
long long i = 0;
for ( poz <<= 30; poz; poz >>= 1 )
{
if ( OK(i + poz) )
i += poz;
}
return i + 1;
}
bool OK(int v)
{
unsigned long long x, cnt;
for ( int i = 1; i <= k; ++i )
{
x = v;
cnt = 0;
while ( x )
{
cnt += x/d[i];
x /= d[i];
}
if ( cnt < pow[i]*q )
return true;
}
return false;
}