Cod sursa(job #1301117)

Utilizator tatianazTatiana Zapirtan tatianaz Data 25 decembrie 2014 16:38:17
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#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;
}