Cod sursa(job #1591198)

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

using namespace std;

int p, q;

int find(int f, int p)
{
    long long st = 0, dr = f * p;
    while(st<=dr)
    {
        long long mij=(st+dr)/2;
        int nr=0;
        int aux = f;
        while(mij>=aux)
        {
            nr = nr + mij/aux;
            aux = aux * f;
        }
        if(nr<p)
            st = mij+1;
        else
            dr = mij-1;
    }
    return st;
}

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;
}