Cod sursa(job #292726)

Utilizator crawlerPuni Andrei Paul crawler Data 31 martie 2009 13:38:57
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>

long long A, put;

long long putere(long long x,long long y)
{
     long long ret = 0;
     while (x)
     {
          ret += x/y;
          x/=y;     
     }     
     return ret;
}

long long min(long long nr,long long x)
{
     long long ret=0;
     long long k = 1<<30;
     k = k*k;     
     for (;k>0;k/=2)
          if (putere(ret+k,nr) < x)
               ret += k;
     ++ret;
     return ret;     
}

int main()
{
     freopen("gfact.in","r",stdin);
     freopen("gfact.out","w",stdout);
     
     scanf("%lld%lld", &A, &put);
     
     long long ret = 0;
     
     for (long long i=2;i*i<=A;++i)
     if (A % i == 0)
     {
          long long cnt = 0;
          while (A % i == 0)
               ++cnt,
               A /= i;
          long long tmp = min(i,cnt*put);
          if (ret < tmp)
               ret = tmp;     
     }
     
     if (A > 1)
     {
          long long tmp = min(A,put);
          if (ret < tmp)
               ret = tmp;     
     }
     
     printf("%lld\n", ret);
     
     return 0;     
}