Cod sursa(job #1722343)

Utilizator Bodo171Bogdan Pop Bodo171 Data 27 iunie 2016 21:22:36
Problema GFact Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include<fstream>
#include<cmath>
#include<climits>
using namespace std;
long long a,b,d[105],p[105],pr,u,m,k,fix,i,c,num,y;
void desc()
{
    if(a%2==0)
    {
        k=1;d[k]=2;
        while(a%2==0)
         {a/=2;p[k]++;}
    }
    c=3;
    fix=floor(sqrt(a));
    while(a!=1)
    {
        if(a%c==0)
        {
            k++;
            d[k]=c;
            while(a%c==0)
            {
                a/=c;
                p[k]++;
            }
        }

        c++;
        if(c>=fix) c=a;
    }
}
bool check(long long x)
{
    for(i=1;i<=k;i++)
    {
        num=0;y=d[k];
        while(y<=x)
        {
            num+=x/y;
            y*=d[k];
        }
        if(num<p[k]) return false;
    }
    return true;
}
int main()
{
    ifstream f("gfact.in");
    ofstream g("gfact.out");
    f>>a>>b;
    desc();
    for(i=1;i<=k;i++)
        p[k]*=b;
    pr=0;
    u=LLONG_MAX;
    while(u-pr>1)
    {
        m=pr+(u-pr)/2;
        if(check(m)) u=m;
        else pr=m;
    }
    if(!check(u)) u--;
    g<<u;
    return 0;
}