Cod sursa(job #1479643)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 31 august 2015 19:50:34
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

ifstream fin("gfact.in");
ofstream fout("gfact.out");

typedef long long int var;

const int NMax = 50000;

var k;
var a[NMax], b[NMax];

var bin_search(var D, var power, var hi){
    var lo = 1, mid, R, pos;
    while(lo <= hi){
        mid = (lo + hi) >> 1;
        R = 0;
        for(var x = D; x <= mid; x *= D){
            R += mid / x;
        }
        if(R >= power){
            pos = mid;
            hi = mid - 1;
        } else {
            lo = mid + 1;
        }
    }
    return pos;
}

int main(){
    var p, q, cp, exp, ans;
    fin >> p >> q;
    cp = sqrt(p);
    for(int i = 2; i <= cp; i++){
        if(p % i == 0){
            for(exp = 0; p % i == 0; exp++){
                p /= i;
            }
            a[++k] = i;
            b[k] = exp * q;
        }
    }
    if(p > 1){
        a[++k] = p;
        b[k] = q;
    }
    ans = 0;
    for(int i = 1; i <= k; i++){
        ans = max(ans, bin_search(a[i], b[i], a[i] * b[i]));
    }
    fout << ans;
    return 0;
}