Cod sursa(job #1003269)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 30 septembrie 2013 10:21:05
Problema GFact Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<fstream>
using namespace std;
int P,Q,fact[100],e[100],nrf;

inline bool Ok(int B)
{
	int i,nr;
	long long p;
	for(i=1;i<=nrf;i++)
	{
		p=fact[i];
		nr=0;
		while(1LL*B>=p && nr<e[i])
		{
			nr+=B/p;
			p*=1LL*fact[i];
		}
		if(nr<e[i])
			return false;
	}
	return true;
}

inline int CautareBinara()
{
	int st,dr,mij,rez;
	st=0;
	dr=rez=1000000000;
	while(st<=dr)
	{
		mij=(st+dr)/2;
		if(Ok(mij))
		{
			rez=mij;
			dr=mij-1;
		}
		else
			st=mij+1;
	}
	return rez;
}

int main()
{
	int i;
	ifstream fin("gfact.in");
	fin>>P>>Q;
	fin.close();
	
	if(P%2==0)
	{
		fact[++nrf]=2;
		while(P%2==0)
		{
			e[nrf]++;
			P/=2;
		}
		e[nrf]*=Q;
	}
	i=3;
	while(i*i<=P)
	{
		if(P%i==0)
		{
			fact[++nrf]=i;
			while(P%i==0)
			{
				e[nrf]++;
				P/=i;
			}
			e[nrf]*=Q;
		}
		i+=2;
	}
	if(P>1)
	{
		fact[++nrf]=P;
		e[nrf]=Q;
	}
	
	ofstream fout("gfact.out");
	fout<<CautareBinara()<<"\n";
	fout.close();
	return 0;
}