Cod sursa(job #1593535)

Utilizator Firealex2Rotileanu Alexandru Firealex2 Data 8 februarie 2016 17:56:42
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>

using namespace std;

long long int cautbin(long long f, long long p);
long long int div(long long int n, long long int d);
long long int p, q, rez=0;

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

long long int cautbin(long long f, long long b)
{
	long long int i = 0;
	long long int pas = 1<<30;
	pas *= pas;
	while (pas != 0)
	{
		if (div(i + pas, f) < b && i+pas<=b*f)
			i += pas;
		pas /= 2;
	}
	return i + 1;
}

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