Cod sursa(job #1591205)

Utilizator Matei_IgnutaMatei Ignuta Matei_Ignuta Data 5 februarie 2016 21:28:11
Problema GFact Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>

using namespace std;

int p, q;

long long find(int p, int q)
{
    long long st = 1, dr = 5000000000000000000, mid, x, pow;
    while(dr>st+1)
    {
        mid=(st+dr)/2;
        x=p;
        pow=0;
        while(x<=mid)
        {
            pow=pow+mid/x;
            x*=p;
        }
        if(pow<q)
            st=mid;
        else
            dr=mid;
    }
    return dr;
}

int main()
{
    freopen("gfact.in", "r", stdin);
    freopen("gfact.out", "w", stdout);
    scanf("%d %d", &p, &q);
    long long ans = 0;
    int f = 2;
    while(p > 1)
    {
        int pow = 0;
        if(f * f > p)
            f = p;
        while(p%f==0)
        {
            pow++;
            p = p / f;
        }
        long long rez = find(f, pow*q);
        if(rez > ans)
            ans = rez;
        f++;
    }
    printf("%d", ans);
    return 0;
}