Cod sursa(job #1331567)

Utilizator Darius15Darius Pop Darius15 Data 31 ianuarie 2015 20:21:48
Problema GFact Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <bitset>
#include <cmath>
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
bitset <50001> viz;
int v[50001],diviz[31],i,j,c,l,p,q,o;
bool ok;
long long st,dr,m,vd,best,pr,expo[31];
int main()
{
    f>>p>>q;
    v[1]=2;
    l=1;
    c=sqrt(p);
    for (i=2;i<=c;i++)
        if (viz[i]==false)
        {
            j=i*i;
            if (j/i==i)
                for (j=i*i;j<=c;j+=i)
                    viz[j]=true;
        }
        vd=p;
    for (i=1;i<=l;i++)
        if (vd%v[i]==0)
            {
            while(vd%v[i]==0)
                vd=vd/v[i];
            diviz[++o]=v[i];}
    if (vd>1)
        diviz[++o]=vd;
    st=1,dr=((1ll<<60)-1);
    best=-1;
    while(st<=dr)
    {
       m=(st+dr)/2;
       for (i=1;i<=o;i++)
        expo[i]=0;
       for (i=1;i<=o;i++)
       {
           vd=m;
           pr=1;
           while(pr<=vd/diviz[i])
            pr=pr*diviz[i],expo[i]+=(vd/pr);
       }
       ok=true;
       for (i=1;i<=o;i++)
        if (expo[i]<q) ok=false;
        if (ok==false) st=m+1;
        else best=m,dr=m-1;
    }
    g<<best;
    return 0;
}