Cod sursa(job #492778)

Utilizator raduspowertinca radu raduspower Data 15 octombrie 2010 21:49:32
Problema GFact Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <fstream>
using namespace std;

int baza[1<<5],ex[1<<5],m;

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

void desc(int n,int q)
{
	int i,p;
	for (i=2;i*i<=n;i++)
		if (n%i==0)
		{
			for (p=0;n%i==0;p++,n/=p);
			baza[++m]=i;
			ex[m]=p*q;
		}
	if (n!=1)
	{
		baza[++m]=n;
		ex[m]=q;
	}
}

int putere(int n,int p)
{
	int nr=0;
	while (n)
	{
		n/=p;
		nr+=n;
	}
	return nr;
}

bool verif(int n)
{
	for (int i=1;i<=m;i++)
		if (putere(n,baza[i])<ex[i])
			return false;
	return true;
}

int bs()
{
	int i,step=1<<30;
	for (i=0;step;step>>=1)
		if (!verif(i+step))
			i+=step;
	return i+1;
}

int main()
{
	int p,q;
	in>>p>>q;
	desc(p,q);
	out<<bs()<<"\n";
	return 0;
}