Cod sursa(job #1414875)

Utilizator edicCiuculescu Eduard edic Data 3 aprilie 2015 10:46:12
Problema GFact Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<cstdio>
using namespace std;
struct vi{int v,i,s;};
vi v[30];
int lag(int n,int k)
{
    int s=0;
    int c=k;
    while(n/c>0)
    {
        s+=n/c;
        c*=k;
    }
    return s;
}
int main()
{
    freopen("gfact.in","r",stdin);
    freopen("gfact.out","w",stdout);
    int a,p,f,st=1,dr=2000000000,mid,i;
    scanf("%d%d",&a,&p);
    int ma=0,k=0;
    for(i=2;i<=a;i++)
    {
        if(a%i==0)
        {
            k++;
            v[k].v=1;
            v[k].i=i;
        }
        while(a%i==0)
        {
            v[k].v*=i;
            a/=i;
            v[k].s++;
        }
        if(v[k].v>ma)
        {
            ma=v[k].v;
            f=k;
        }
    }
    while(st<dr+1)
    {
        mid=(st+dr)/2;
        if(lag(mid,v[f].i)>v[f].s*p)
        {
            dr=mid-1;
        }
        else
        {
            st=mid+1;
        }
    }
    printf("%d",mid);
    return 0;
}