Cod sursa(job #365866)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 20 noiembrie 2009 01:35:29
Problema GFact Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <cstdio>


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

int p,q,d,e;

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;
}	

inline int power(int a, int b)
{
    int 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);
    }
}


int main()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d", &p, &q);
	
	if (q==1)
	{
		 
		if (prim(p))
			printf("%d", p);
		
		d=2;
		e=0;
		
		while(p%2==0)
		{
			e++;
			p/=d;
		}
		
		if (e>0 && p==1)
			printf("2");
		else
		{
			d=3;
			while(p!=1)
			{
				e=0;
				
				while(p%d==0)
				{
					e++;
					p/=d;
				}
				
				if (e>0 && p==1)
					printf("%d ", d);
				d+=2;
			}
		}
	}
	else
	{
		p=power(p,q);
		
		d=2;
		e=0;
		
		while(p%2==0)
		{
			e++;
			p/=d;
		}
		
		if (e>0 && p==1)
			printf("4");
		else
		{
			d=3;
			while(p!=1)
			{
				e=0;
				
				while(p%d==0)
				{
					e++;
					p/=d;
				}
				
				if (e>0 && p==1)
					printf("%d ", d*d);
				d+=2;
			}
		}
	}
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}