Cod sursa(job #2794911)

Utilizator mariaionescu2006Ionescu Maria mariaionescu2006 Data 5 noiembrie 2021 18:01:00
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("gfact.in");
ofstream fout ("gfact.out");
int p,q;
long long m;
long long pow(long long a,long b)
{
    long long g=b,c=0;
    while (g<=a)
          {c=c+a/g;
           g*=b;}
    return c;
}
struct div
{
    int d,e;
}v[12];
int main()
{
    fin >>p>>q;
    if (p==1) fout <<1;
    else {int i=2,k=0;
    while (i*i<=p)
          {while (p%i==0)
                 {v[k+1].e++;
                  p=p/i;}
           if (v[k+1].e>0) {k++;v[k].d=i;}
           i++;}
    if (p>1) {k++;v[k].d=p;v[k].e=1;}
    for (i=1;i<=k;i++)
        {long long x=v[i].d,y=q*v[i].e;
         long long left=1,right=60000000000000,sol=0;
         while (left<=right)
               {long long mid=(left+right)/2;
                if (pow(mid,x)>=y) {sol=mid;
                                    right=mid-1;}
                else {left=mid+1;}}
         if (sol>m) m=sol;}
    fout <<m;}
    return 0;
}