Cod sursa(job #357685)

Utilizator andreii_93andrei ion andreii_93 Data 20 octombrie 2009 10:26:44
Problema GFact Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<stdio.h>
long long d[20],p[20],nr,q,a;
const long long MAX=(long long ) 1<<50;

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

bool fact(long long n,long long i)
{
	long long r=0;
	while(n)
	{
		r+=n/d[i];
		n/=d[i];
	}
	return r>=p[i]*q;
}

bool ok(long long b)
{
	for(long long  i=1;i<=nr;++i)
		if(!fact(b,i))
			return false;
		return true;
}

int main()
{
	freopen("gfact.in","r",stdin);
	freopen("gfact.out","w",stdout);
	scanf("%lld%lld",&a,&q);
	dsc();
	for(long long i=2;i<=MAX;++i)
		if(ok(i))
		{
			printf("%lld",i);
			return 0;
		}
	return 0;
}