Pagini recente » Cod sursa (job #2522018) | Cod sursa (job #1144814) | Cod sursa (job #1882922) | Cod sursa (job #2149083) | Cod sursa (job #1301117)
#include <fstream>
using namespace std;
ifstream is("gfact.in");
ofstream os("gfact.out");
long long p, q;
int k;
int d[100], pow[100];
void Divizor(long long n);
long long Caut_Bin();
bool OK(long long 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(long long 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 = 1LL << 60;
long long i = 0;
while ( poz )
{
if ( OK(i + poz) )
i += poz;
poz >>= 1;
}
return i + 1;
}
bool OK(long long v)
{
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;
}