Cod sursa(job #582866)

Utilizator cumbaiaMihai Bercu cumbaia Data 16 aprilie 2011 13:29:34
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<stdio.h>

int d[20],p[20],a,b,nr;

void div(int a)
{
	int r;
	for(r=2 ; r*r<=a ; r++)
	{
		if(a%r==0)
		{
			d[++nr] = r;
			while(a%r==0)
			{
				a/=r;
				p[nr]++;
			}
		}
	}
	if(a!=1)
	{
		d[++nr] = a;
		p[nr] = 1;
	}
}

long long putere(long long n,long long s)
{
	long long c=0;
	while(n>=s)
	{
		c+=n/s;
		n/=s;
	}
	return c;
}

bool divizibil(long long n)
{
	int i;
	for(i=1;i<=nr;++i)
	{
		if(putere(n,d[i])<p[i]*b)
			return false;
	}
	return true;
}

long long caut()
{
	long long i,pas = (long long)1<<60;
	for(i=0;pas!=0;pas/=2)
	{
		if(!divizibil(i+pas))
			i+=pas;
	}
	return i+1;
}


int main()
{
	freopen("gfact.in","r",stdin);
	freopen("gfact.out","w",stdout);
	scanf("%d%d",&a,&b);
	div(a);
	printf("%lld\n",caut());
	return 0;
}