Cod sursa(job #848727)

Utilizator vld7Campeanu Vlad vld7 Data 5 ianuarie 2013 18:35:25
Problema GFact Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>

using namespace std;

ifstream f("gfact.in");
ofstream g("gfact.out");

const long long LIM = 1LL * 30000 * 30 * 2000000000;

long long P, sol, fact;
int Q, need;

long long baga(long long val)
{
	long long aux = fact, ret = 0;;
	
	while (aux <= val) {
		ret += val / aux;
		aux *= fact;
	}
	
	return ret;
}

long long bsearch(long long lo, long long hi)
{
	long long mid;
	
	while (lo <= hi) {
		mid = lo + (hi - lo) / 2;
		if (baga(mid) < need)
			lo = mid + 1;
		else
			hi = mid - 1;
	}
	
	if (baga(mid) < need)
		mid++;
	return mid;
}

void solve(long long fact, int put)
{
	need = put * Q;
	
	long long rez = bsearch(1, LIM);
	if (rez > sol)
		sol = rez;
}

int main()
{
	f >> P >> Q;
	long long aux = P;
	fact = 2;
	
	while (aux > 1) {
		int put = 0;
		while (aux % fact == 0) {
			aux /= fact;
			put++;
		}
		if (put)
			solve(fact, put);
		fact++;
	}
	
	g << sol << '\n';
	
	return 0;
}