Cod sursa(job #1813335)

Utilizator raulmuresanRaul Muresan raulmuresan Data 22 noiembrie 2016 21:21:20
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<fstream>
#include<vector>
#include<string>
#define modulo 666013

using namespace std;

ifstream fin("gfact.in");
ofstream fout("gfact.out");


string sir;
long long int i, n, k, j,contor,st,dr,sol,x,y,p,q ;

long long int cauta(long long int exponent, long long int putere)
{
    long long int i, st = 1, dr = 1LL<<60,mid, x, R;
    while(st <= dr)
    {
        mid = (st + dr) / 2;
        R = 0;
        for(x = exponent; x <= mid; x *= exponent){
            R += mid / x;
        }
        //fout<<"R-"<< R <<"\n";
        if(R >= putere){
            dr = mid - 1;
        } else {
            st = mid + 1;
        }
    }
    return st;
    //fout << pas <<"\n";
}

int main()
{
    fin >> p >> q;
    sol = 0;
    for(i = 2; i * i <= p; i++)
    {
        if(p % i == 0)
        {
            long long int putere = 0;
            while(p % i == 0)
            {
                p = p / i;
                putere += q;
            }
            //fout <<i <<" "<<exponent<<"\n";
            //cauta(i,exponent);
            sol = max(sol ,cauta(i, putere) );
            //fout <<sol<< "\n";
        }
    }
    if(p > 1)
    {
        sol = max(sol ,cauta(p, q) );
        //fout <<p << " 1\n";
    }
    fout << sol << "\n";
}