Cod sursa(job #2356462)

Utilizator alexradu04Radu Alexandru alexradu04 Data 26 februarie 2019 18:18:20
Problema GFact Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio>
#include <algorithm>

using namespace std;
int k,q;
int my_exp[10000];
int prim[10000];
void div (int n)
{
    int d=2;
    while(d*d<=n)
    {
        int p=0;
        while(n%d==0)
        {
             n/=d;
             p++;
        }
        my_exp[d]=p*q;
        if(p)
        {
            prim[++k]=d;
        }
        d++;
    }
    if(n)
        my_exp[n]=q,prim[++k]=n;
}
int lj(int n,int x)
{
    int put=x,sum=0;
    while(put<=n)
    {
        sum+=n/put;
        put*=x;
    }
    return sum;
}
int bs(int x)
{
    int st=1;int dr=1e9;
    int mid=0;
    int ans=0;
    while(st<=dr)
    {
        mid=st+dr;mid/=2;
        if(lj(mid,x)<my_exp[x])
            st=mid+1;
        else
        {
            ans=mid;
            dr=mid-1;
        }
    }
    return ans;
}
int main()
{
    freopen("gfact.in","r",stdin);
    freopen("gfact.out","w",stdout);
    int p;
    scanf("%d %d",&p,&q);
    div(p);
    int maxx=-1;
    for(int i=1;i<=k;++i)
    {
        maxx=max(maxx,bs(prim[i]));
    }
    printf("%d",maxx);
    return 0;
}