Cod sursa(job #354170)

Utilizator Adela_BaciuAdela Baciu Adela_Baciu Data 7 octombrie 2009 11:43:13
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<cstdio>
#define max 1<<60
#define maxnr 100
long long exponent[maxnr],factor[maxnr],q;
bool ok(long long n)
{
	long long p,ok1=1,i,m,cp=p,c=n;
	for(i=1;i<=factor[0];i++)
	{
		n=c;
		p=factor[i];
		m=0;
		while(n)
			m+=(n/=p);
		if(m<q*exponent[i])
			return false;
	}
	return true;
}
long long cb(long long st, long long dr)
{
	long long i,pas;
	pas=max;
	for(i=0;pas;pas>>=1)
		if(!ok(i+pas))
			i+=pas;
	return i+1;
}
int main()
{
	long long i;
	long long e=0,n=0,p=0;
	freopen("gfact.in","r",stdin);
	freopen("gfact.out","w",stdout);
	scanf("%lld%lld",&p,&q);
	i=2;
	for(i=2 ; i*i<=p ; ++i)
	{
		e=0;
		while(p%i==0)
		{
			e++;
			p=p/i;
		}
		if(e>0)
		{
			factor[++factor[0]]=i;
			exponent[++exponent[0]]=e;
		}
	}
	if(p!=1)
	{
		factor[++factor[0]]=i;
		exponent[++exponent[0]]=1;
	}
	n=cb(1,max);
	printf("%lld",n);
}