Cod sursa(job #1313503)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 10 ianuarie 2015 18:47:11
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <cstdio>
#include <fstream>
using namespace std;
ifstream f("gfact.in");
ofstream g("gfact.out");
int p,q;
int d[100],e[100],nr;
long long t[100],sol;


void desc(int a)
{
    int i=2;
    while (a!=1) {
        if (a%i==0) {
            d[++nr]=i;
            e[nr]=1;
            a/=i;
            while (a%i==0) {
                a/=i;
                e[nr]++;
            }
        }
        else if (i*i>a) {
            d[++nr]=a;
            e[nr]=1;
            a=1;
        }
    i++;
    }


}
bool trying(long long a)
{
    int i,j;
    long long x,y;
    for (i=1;i<=nr;i++)
                t[i]=0;


    for (i=1;i<=nr;i++) {
                x=1;
                y=-1;
                while (x<=a){
                    x*=1LL*d[i];
                    y=1LL*a/x;

                    t[i]+=y;
                }

    }
    for (i=1;i<=nr;i++) if (t[i]<e[i]) return false;
    return true;
}


int main()
{
    int i,j;
    f>>p>>q;
    desc(p);
    for (i=1;i<=nr;i++)
                e[i]*=q;

    long long  st=1,dr=1LL*(1<<28)*(1<<28),mid;

    while (st<=dr) {
            mid=(st+dr)>>1;
            if (trying(mid)==true) {
                    dr=mid-1;
                    sol=mid;
            }
               else st=mid+1;
    }
    g<<sol;
    return 0;
}