Cod sursa(job #359190)

Utilizator SheepBOYFelix Liviu SheepBOY Data 26 octombrie 2009 09:51:45
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<stdio.h>
#define MAX 100100
const long long MAX_LONG = (long long)1<<64;
long long p[MAX],d[MAX],nr,q;
void decomp(long long &a)
{
	long long n=a;
	for(long long i=2;i*i<n;++i)
	if(!(a%i))
	{
		d[nr]=i;
		while(!(n%i)&&n)
		{
			n/=i;
			p[nr]++;
			
		}
		++nr;
	}
	if(n>1)
	{
		d[nr]=n;
		p[nr++]=1;
	}
}
bool fact(long long b,long long i)
{
	long long r=0;
	while(b)
	{
		r+=b/d[i];
		b/=d[i];
	}
	return r>=p[i]*q;
}
bool ok(long long b)
{
	for(long long i=0;i<nr;++i)
		if(!fact(b,i))
			return false;
		return true;
}
int main()
{
	long long a;
	freopen("gfact.in","r",stdin);
	freopen("gfact.out","w",stdout);
	scanf("%lld%lld",&a,&q);
	decomp(a);
	for(long long i=1;i<=MAX_LONG;++i)
		if(ok(i))
		{
			printf("%lld",i);
			return 0;
		}
	return 0;
}