Mai intai trebuie sa te autentifici.
Cod sursa(job #2308742)
Utilizator | Data | 27 decembrie 2018 18:06:53 | |
---|---|---|---|
Problema | GFact | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 0.99 kb |
#include <fstream>
#include<cmath>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int divizor[100],putere[100];
long long nd,p,q;
long long nrp(long long n, int p)
{
long long nr=0;
while (n>=p)
{
nr+=n/p;
n/=p;
}
return nr;
}
bool df(long long n)
{
for (int i=0; i<nd; i++)
{
if (nrp(n,divizor[i])<putere[i] * q)
{
return 0;
}
}
return 1;
}
int main()
{
in>>p>>q;
int dv = 2;
long long r = 0, pas = 1<< 30;
while (dv * dv <= p)
{
if (p % dv == 0)
{
divizor[nd] = dv;
while (p % dv == 0)
{
putere[nd]++;
p /= dv;
}
nd++;
}
dv++;
}
if (p > 1)
{
divizor[nd] = p;
putere[nd++] = 1;
}
while (pas != 0)
{
if (df(r + pas)==0)
{
r += pas;
}
pas /= 2;
}
out<<r;
}