Cod sursa(job #2784765)

Utilizator CalinHanguCalinHangu CalinHangu Data 17 octombrie 2021 12:43:08
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
struct numere_descompuse{
    long factor,expo;
} descP[100];

long long p,q,copie,expo,k,poz,i,st,dr,mij;

void desc()
{
    copie=p;
    expo=0;
    while(copie % 2 == 0){
        expo++;
        copie/=2;
    }
    if(expo > 0){
        descP[++k].factor = 2;
        descP[k].expo = expo * q;
    }
    for(i=3;i<=sqrt(copie);i+=2){
        expo=0;
        while(copie%i==0)
        {
            expo++;
            copie /= i;
        }

        if(expo > 0){
            descP[++k].factor = i;
            descP[k].expo = expo * q;
        }
    }
    if(copie > 2){
        descP[++k].factor = copie;
        descP[k].expo = q;
    }
}

long long put(long long factor,long long nr)
{
    long long power = factor, rez = 0;
    while(power <= nr){
        rez += nr / power;
        power *= factor;
    }
    return rez;
}

bool esteOk(long long x)
{
   for(i=1;i<=k;i++)
        if(descP[i].expo>put(descP[i].factor, x))
            return 0;
    return 1;
}

int main()
{
    in>>p>>q;
    desc();
    st=1;
    dr=((long long)1<<50);
    while(st<=dr)
    {
        mij=(dr+st)/2;
        if(esteOk(mij))
        {
            poz=mij;
            dr=mij-1;
        }
        else
            st=mij+1;
    }
    out<<poz;
    return 0;
}