Cod sursa(job #2074524)

Utilizator Vladi.BarasBaras Nicholas Vladimir Laurentiu Vladi.Baras Data 24 noiembrie 2017 18:33:48
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream>
using namespace std;
ifstream cin("gfact.in");
ofstream cout("gfact.out");
const long long lim=1LL<<50;
long long div1[500],put[500],n,baza,exp;
void div1izori(long long x)
{
    long long i;
    for(i=2;i*i<=x;i++)
      if(x%i==0)
      {
          n++;
          div1[n]=i;
          while(x%i==0)
          {
              x/=i;
              put[n]++;
          }
      }
    if(x!=1)
    {
        n++;
        div1[n]=x;
        put[n]=1;
    }
}
long long verif(long long x)
{
    long long i,k,sum;
    for(i=1;i<=n;i++)
    {
        sum=0;
        k=div1[i];
        while(x/k>0)
        {
            sum+=x/k;
            k=k*div1[i];
        }
        if(sum<put[i]*exp)
          return 0;
    }
    return 1;
}
int main()
{
    long long st,dr,mij,rasp=0;
    cin>>baza>>exp;
    div1izori(baza);
    st=0;
    dr=lim;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(verif(mij)==1)
        {
            rasp=mij;
            dr=mij-1;
        }
        else
          st=mij+1;
    }
    cout<<rasp;
    return 0;
    }