Cod sursa(job #2068144)

Utilizator cip_ionescuCiprian Ionescu cip_ionescu Data 17 noiembrie 2017 11:15:30
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>

using namespace std;

int d[200], e[200];
long long nd, q;

long long putere(long long n, int d)
{
    long long s = 0;
    while(n >= d) s += (n /= d);
    return s;
}

bool sepoate(long long n)
{
    for(int i = 1 ; i <= nd ; i++){
        if(putere(n, d[i]) < e[i] * q) return false;
    }
    return true;
}

int main()
{
    int p, n, i;
    cin >> p >> q;
    n = p;
    i = 2;
    while(i * i <= n){
        if(n % i == 0){
            d[++nd] = i;
            while(n % i == 0){
                n /= i;
                e[nd]++;
            }
        }
        i++;
    }
    if(n != 1){
        d[++nd] = n;
        e[nd] = 1;
    }
    long long r = 0, pas = 1LL << 60;
    while(pas != 0){
        if(!sepoate(r + pas)) r += pas;
        pas /= 2;
    }
    cout << r + 1;
    return 0;
}