Cod sursa(job #1722333)

Utilizator Bodo171Bogdan Pop Bodo171 Data 27 iunie 2016 21:13:32
Problema GFact Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 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;
                d[k]++;
            }
        }
        if(c>=fix) c=a;
        c++;
    }
}
bool check(int 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=INT_MAX;
    while(u-pr>1)
    {
        m=pr+(u-pr)/2;
        if(check(m)) u=m;
        else pr=m;
    }
    g<<u;
    return 0;
}