Cod sursa(job #2800874)

Utilizator AndreiP15Andrei Enea AndreiP15 Data 14 noiembrie 2021 11:58:25
Problema GFact Scor 65
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.95 kb
#include <iostream>
#include <fstream>

using namespace std;
long long int n,p,g,nr=0,di=0,d=3,put=0;
long long int putere(int n)
{
      int 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 int 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 int 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 int l=0,r=500000000,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;
}