Cod sursa(job #3145094)

Utilizator maryyMaria Ciutea maryy Data 12 august 2023 17:11:42
Problema GFact Scor 55
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <fstream>
//#include <vector>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int f[10000000];//cati factori primi trebuie sa contina factorialul
long long prim, divi=0;
int q;
//vector <int, int>f[1000000000];
void Descompunere(long long n)
{
    long long d=2, p;
    while(n>1)
    {
        p=0;
        if(n==d && divi==0)
        {
            prim=1;
            break;
        }
        while(n%d==0)
        {
            p++;
            n=n/d;
            divi++;
        }
        if(d>44721)
        {
            prim=1;
            break;
        }
        f[d]=p*q;
        d++;
    }
}
void Desc(long long n)
{
    long long d=2, p, c=0;
    while(n>1)
    {
        p=0;
        if(n==d && c==0)
        {
            f[n]--;
            if(f[n]>=0)
                divi--;
            break;
        }
        while(n%d==0)
        {
            p++;
            n=n/d;
            c++;
        }
        if(f[d]>=p)
            divi-=p;
        else if(f[d]>=0)
            divi-=f[d];
        f[d]-=p;
        //divi-=p;
        d++;
    }
}
int main()
{
    long long k=2, p;
    in>>p>>q;
    Descompunere(p);
    if(p==1)
    {
        out<<1;
        return 0;
    }
    if(prim==1)
    {
        long long m=1;
        while(m*(m+1)/2<q)
        {
            m++;
        }
        out<<m*p;
        return 0;
    }
    divi=divi*q;
    //out<<divi<<endl;
    while(divi>0)
    {
        Desc(k);
        k++;
    }k--;
    out<<k;
}