Cod sursa(job #300226)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 7 aprilie 2009 12:09:43
Problema GFact Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>

using namespace std;

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

long D[1000],P,Q;
long put[1000],num;
long long rez;

void divizori()
{
     if (P%2==0)
          D[++num]=2;

     while (P%2==0)
     {
          P/=2;
          put[num]++;
     }

     for (int i=3;i<=P/i;i+=2)
     {
          if (P%i==0)
               D[++num]=i;
          while (P%i==0)
          {
               P/=i;
               put[num]++;
          }
     }
if (P!=1)
{
     D[++num]=P;
     put[num]=1;
}
}

long max(long a,long b)
{
     return a>b?a:b;
}

long cal(long a,long b)
{
     int n=0;
     while (a%b==0)
     {
          a/=b;
          n++;
     }
     return n;
}

void solve()
{
     long nr,numar;
     for (int i=1;i<=num;i++)
     {
          nr=1;
          numar=D[i];
          while (nr<put[i])
          {
               numar+=D[i];
               nr+=cal(numar,D[i]);
          }
          rez=max(rez,numar);
     }
}

int main()
{
     fin>>P>>Q;
     divizori();
     for (int i=1;i<=num;i++)
          put[i]*=Q;
     solve();
     fout<<rez<<"\n";
     return 0;
}