Cod sursa(job #2801054)

Utilizator AndreiP15Andrei Enea AndreiP15 Data 14 noiembrie 2021 19:06:49
Problema GFact Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.95 kb
#include <iostream>
#include <fstream>

using namespace std;
long long  n,p,g,nr=0,di=0,d=3,put=0;
long long  putere(long long  n)
{
      long long pt=nr,s=0;
      while(pt<=n)
      {
            s+=n/pt;
            pt*=nr;
      }
      return s;
}
int main()
{
      ifstream cin("gfact.in");
      ofstream cout("gfact.out");
    cin>>n>>p;
///*****************************************************************************************************************************************************************
    long long  a=n;
    while(a%2==0)
    {
        a=a/2;
        put++;
    }
    if(put)
    {
        nr=2;
        di=2;
        put--;
        while(put)
        {
            put--;
            nr=nr*2;
        }
    }
    while(d<=a)
    {
        long long  m=0;
        put=0;
        while(a%d==0)
        {
            a=a/d;
            put++;
        }
        if(put)
        {
            m=d;
            put--;
            while(put)
            {
                put--;
                m=m*d;
            }
        }
        if(m>nr)
        {
            nr=m;
            di=d;
        }
        d+=2;
    }
    ///cout<<nr;
    put=0;
    a=nr;
    d=di;
    while(a%d==0)
    {
          put++;
          a=a/d;
    }
    nr=d;
    p*=put;
    ///cout<<nr<<" "<<p;
///***************************************************************************************************************************************************************************************
    /*cin>>n;
    cout<<putere(n);*/
    long long l=0,r=60000000000000,m,sol;
    while(l<=r)
    {
          m=(l+r)/2;
          if(putere(m)<p)
          {
                l=m+1;
          }
          else if(putere(m)==p)
          {
                sol=m;
                r=m-1;
          }
          else if(putere(m)>p)
          {
                r=m-1;
          }
    }
    cout<<sol;
    return 0;
}