Cod sursa(job #1313127)

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


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(int 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;
                for (j=1;j<=e[i];j++) {
                            x*=1LL*d[i];
                            y=1LL*a/x;
                            if (y==0) break;
                            t[i]+=y*j;
                }
    }
    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;

    int st=1,dr=1<<22,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;
}