Cod sursa(job #812037)

Utilizator Vladinho97Iordan Vlad Vladinho97 Data 13 noiembrie 2012 11:59:47
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<fstream>
#include<math.h>
using namespace std;
int fac[20],nr=1,power[20];
long long p,q;
void desc(long long n)
{
	double lim=sqrt((double)n);
	long long	d,e,x=n;
	d=2;
	while(d<=lim&&x>1)
	{
		e=0;
		while(x%d==0)
		{
			e++;
			x=x/d;
		}
		if(e>0)
		{
			fac[nr]=d;
			power[nr]=e*q;
			nr++;
		}
		d++;
	}
	if(x>1)
	{
		fac[nr]=x;
		power[nr]=1*q;
		nr++;
	}
}
long long mult(long long n,long long k)
{
	long long aux=k,raspuns=0;
	while(n>=aux)
	{
		raspuns+=n/aux;
		aux*=k;
	}
	return raspuns;
}
bool verif(long long med)
{
	int i;
	for(i=1;i<nr;i++)
		if(mult(med,fac[i])<power[i])
			return 0;
	return 1;
}

long long bs()
{
	long long st,dr,med,last;
	st=1;
	dr=pow((double)2,(double)60)-1;
	while(st<=dr)
	{
		med=st+(dr-st)/2;
		if(verif(med)==0)
			st=med+1;
		else
		{
			dr=med-1;
			last=med;
		}
	}
	return last;
}

int main()
{
	ifstream f("gfact.in");
	ofstream g("gfact.out");
	f>>p>>q;
	desc(p);
	long long x=bs();
	g<<x;
	
}