Pagini recente » Cod sursa (job #2985759) | Borderou de evaluare (job #2057105) | Cod sursa (job #2671905) | Borderou de evaluare (job #1761710) | Cod sursa (job #457786)
Cod sursa(job #457786)
#include<fstream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int q, d[20], p[20], n;
void divizor(int x)
{
int i;
for(i=2; i*i<=x; i++)
if(x%i == 0)
{
d[++n]=i;
while(x%i==0)
{
++p[n];
x/=i;
}
}
if(x!=1)
{
d[++n] = x;
p[n]=1;
}
}
long long putere(long long x, int d)
{
long long nr=0;
while(x)
{
nr+=x/d;
x/=d;
}
return nr;
}
bool factor(long long x)
{
long long aux;
for(int i=1; i<=n; i++)
{
aux=putere(x,d[i]);
if(aux<p[i]*q)
return false;
}
return true;
}
long long binar()
{
long long i;
long long pos = (long long)1<<60;
for(i=0; pos!=0; pos/=2)
if(!factor(i+pos))
i+=pos;
return 1+i;
}
int main()
{
int p;
in>>p>>q;
divizor(p);
out<<binar()<<"\n";
return 0;
}