Pagini recente » Cod sursa (job #3255888) | Cod sursa (job #1428479) | Cod sursa (job #2505034) | Cod sursa (job #2711077) | Cod sursa (job #805406)
Cod sursa(job #805406)
#include <fstream>
//int const N=1LL;
using namespace std;
int p,q,d,putere[24],div[24];
bool divide(long long n)
{
int i,j;
long long pow,s;
for(i=1;i<=d;i++)
{
s=0;
pow=1;
while(pow <= n)
{
pow *= div[i];
s += n/pow;
}
if(s<putere[i]*q) return false;
}
return true;
}
void descomp(int n)
{
int i;
for(i=2 ;i*i<=n;i++)
{
if(n%i!=0) continue;
div[++d] = i;
while(n%i == 0)
{
putere[d]++;
n /= i;
}
}
if(n != 1)
{
div[++d] = n;
putere[d] = 1;
}
}
long long caut()
{
long long i,pas = 1LL << 60;
for(i=0 ; pas!=0 ; pas >>= 1)
if(!divide(i+pas))
i += pas;
return i+1;
}
int main()
{
ifstream f("gfact.in");
ofstream g("gfact.out");
f>>p>>q;
descomp(p);
g << caut();
}