Cod sursa(job #492139)

Utilizator ioanabIoana Bica ioanab Data 13 octombrie 2010 16:09:21
Problema GFact Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#include <math.h>

long long  p[100];
long long  q[100];

void desc(int n)
{
	int i,nr,t;
	t=0;
	for(i=2;i*i<n;i++)
	{
		nr=0;
		if(n%i!=0)		
			continue;
		else
			while(n%1==0)
			{
				nr++;
				n=n/i;
			}
		p[++t]=i;
		p[t]=nr;
	}
	if(n!=1)
	{
		p[++t]=n;
		q[t]=1;
	}
	
	p[0]=t;
	q[0]=t;
}

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

bool ok(int n)
{
	int i,num;
	for(i=1;i<=p[0];i++)
	{
		num=nri(n,p[i]);
		if(num<q[i])
			return false;
	}
	return true;
}

int main()
{
	freopen("gfact.in","r",stdin);
	freopen("gfact.out","w",stdout);
	long long a,b,i,pas,st,dr,m;
	scanf("%lld%lld",&a,&b);
	i=0;
	desc(a);
	for(i=1;i<=p[0];i++)
	{
		q[i]*=b;
	}
	st=1;
	dr=1<<30;
	while(st<=dr)
	{
		m=(st+dr)/2;
		if(!ok(m))
			st=m+1;
		else
			dr=m-1;
	}
	printf("%lld",st);
	return 0;
}