Cod sursa(job #2539755)

Utilizator Vlad_AnicaAnica-Popa Vlad-Ioan Vlad_Anica Data 6 februarie 2020 11:34:21
Problema GFact Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin ("gfact.in");
ofstream fout("gfact.out");

bool f(int n, int p, int q)
{
    int d,i;
    int freq[44723];
    for(i=1;i<=44722;i++)
        freq[i]=0;
    int divprim=0;
    int cp,cpn;
    cp=p;
    while(p%2==0)
    {
        p/=2;
        freq[2]++;
    }
    freq[2]*=q;
    d=3;
    while(d<=44722 && p>1)
    {
       // cout << 1;
        while(p%d==0)
        {
            p/=d;
            freq[d]++;
        }
        freq[d]*=q;
        d+=2;
    }
    if(p>1)
        divprim=p;
    for(i=2;i<=44722;i++)
    {
        cpn=n;
        while(cpn>0 && freq[i]>0)
        {
            freq[i]-=(cpn/i);
            cpn/=i;
        }
        if(freq[i]>0)
            return 0;
    }
    cpn=n;
    if(divprim>0)
    {
         while(cpn>0)
        {
        q-=(cpn/divprim);
        cpn/=divprim;
        }
        if(q>0)
            return 0;
    }

        return 1;



}

int main()
{
    unsigned int step,pos,cpp,cpq;
    fin >> cpp >> cpq;
    pos=1<<31;
    step=1<<31;
    while(step>0)
    {
        if(f((pos-step),cpp,cpq)==1)
        {
            pos-=step;
        }

        step/=2;
    }
    if(cpp==1)
        fout << 1;
    else
        fout << pos;

    return 0;
}