Cod sursa(job #3191897)

Utilizator AlexandruCorneaCornea Alexandru Mihai AlexandruCornea Data 10 ianuarie 2024 20:55:06
Problema GFact Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin ("gfact.in");
ofstream fout ("gfact.out");
#define DR (1LL << 46)
int d[100001],p[100001],ct,y;
long long putere(long long n, int d)
{

    long long nr = 0;
    while (n >= d)
    {
        nr += (n /= d);
    }
    return nr;
}
bool se_divide(long long n)
{
    for (int i=1; i<=ct; i++){

        if (putere(n,d[i])<p[i]*y)
            return false;}
    return true;
}
int main()
{
    int x;
    fin>>x>>y;
    int a=2,b;

    while(x<a*a)
    {

        b = 0;
        while(x % a == 0)
        {
            ++b;
            x /= a;
        }

        if(b)
        {
            ct++;
            d[ct]=a;
            p[ct]=b;
        }
        ++ a;



    }
    if (x)
    {
          ct++;
            d[ct]=x;
            p[ct]=1;
    }
    long long st=1,dr=DR,r=dr+1;
    while (st<=dr)
    {
      int mij=(st+dr)/2;
        if (se_divide(mij)==true)
        {
            r=mij;
            dr=mij-1;
        }
        else st=mij+1;
    }
    fout<<r;

return 0;
}