Cod sursa(job #365857)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 20 noiembrie 2009 01:21:04
Problema GFact Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>

#define file_in "gfact.in"
#define file_out "gfact.out"

int p,q;

int prim(int X)
{
	int i;
	
	if (X==2) return 1;
	
	for (i=3;i*i<=X;++i)
		 if (X%i==0)
			 return 0;
	return 1;
}	

int solve1()
{	
	int e,d;
		if (prim(p))
			return p;
	
		d=2;
		e=0;
		
		while(p%2==0)
		{
			e++;
			p/=d;
		}
		
		if (e>0 && p==1)
			return 2;
		else
		{
			d=3;
			while(p!=1)
			{
				e=0;
				
				while(p%d==0)
				{
					e++;
					p/=d;
				}
				
				if (e>0 && p==1)
					return d;
				d+=2;
			}
		}
}

inline long long power(long long a, long long b)
{
    long long x;
    if (b==1)
         return a;
    else
    if (b%2==0)
    {
        x=power(a,b/2);
        return (x*x);
    }
    else
    {
       x=power(a,b/2);
       return ((x*x)*a);
    }
}

inline int solve2()
{
	long long rez;
	int nr=1;
    int i;

	
	while(1)
	{
		rez=1;
		nr++;
		for (i=2;i<=nr;++i)
			 rez*=i;
        if (rez%p==0)
			break;	
	}
	
	return nr;
}


int main()
{

	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);

	scanf("%d %d", &p,&q);

	if (q==1)
	{
		printf("%d", solve1());
	}
	else
	{
		p=power(p,q);
		printf("%d", solve2());
	}
	//}

	fclose(stdin);
	fclose(stdout);

	return 0;
}