Cod sursa(job #300229)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 7 aprilie 2009 12:11:22
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>

using namespace std;

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

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

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

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

     for (long 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 long max(long long a,long long b)
{
     return a>b?a:b;
}

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

void solve()
{
     long 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;
}