Cod sursa(job #466873)

Utilizator R.A.RFMI Romila Remus Arthur R.A.R Data 27 iunie 2010 20:19:58
Problema GFact Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
using namespace std;

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

long long  D[10000][2];
long long B,P,i,Q,K,st,dr,fact,rez;
bool fnd;
int factori(long long X,long val)
{
    int rez = 0;
    while(X)
    {
        rez+=X/val;
        X/=val;
    }
    return rez ;
}
int main()
{
    in>>P>>Q;
    D[1][0] = 2;
    int t = 1;
    //factorizarea in sqrt(P)
    while(P%2==0)     D[1][1]+=Q,P/=2;
    for(i=3;i*i<=P&&P!=1;i+=2)
    {
        if(P%i==0)
        {
            D[++t][0]=i;
            while(P%i==0)
            {
                D[t][1]+=Q;
                P/=i;
            }
        }

    }
    if(P!=1)
        D[++t][0] = P,D[t][1]=Q;
    for(i=1;i<=t;i++)
    {
        //caut si retin cel mai mare Bi a.i Bi !%Di == 0
        st = 0;
        dr = D[i][1];
        fnd = false;
        B=D[i][0];
        while(st<=dr&&fnd==false)
        {
            K = (st+dr)/2;
            B = K*D[i][0];
            fact = factori(B,D[i][0]);
            if(fact<D[i][1])
                st = K+1;
            if(fact>D[i][1])
                dr = K-1;
            if(fact==D[i][1])
                fnd = true;
        }
        if(B>rez)
        rez = B;
    }
    out<<rez;
    return 0;
}