Cod sursa(job #29039)

Utilizator c_sebiSebastian Crisan c_sebi Data 8 martie 2007 15:44:41
Problema GFact Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream.h>
#include <math.h>
#define max 5000

long p, q, baza[max], dim;
long ep[max];

void desc(long baza[max], long ep[max], long p, long q, long &dim)
{
	long i, d=2, cp=sqrt(p);
	while (p!=1 && d<=cp)
		{
		  if (p%d==0)
			{for (i=0; i<dim; i++) if (baza[i]==d) break;
			baza[i]=d;
			while (p%d==0)
				{p/=d; ep[i]++;}
			ep[i]*=q;
			if (i==dim) dim++;
			}
		d++;

		}
	if (p>1) {baza[dim]=p; ep[dim++]=q; }
}


int main()
{
	long i, ci, j;
	ifstream f("gfact.in");
	ofstream g("gfact.out");
	f>>p>>q;
	f.close();
	if (p==1) g<<"0\n";
	else {
	desc(baza, ep, p, q, dim);
	i=2;
	while (1)
		{ci=i;
		for (j=0; j<dim && ci!=1; j++)
			while (ci%baza[j]==0 && ep[j])
				{ci/=baza[j]; ep[j]--; }
		for (j=0; j<dim; j++) if (ep[j]) break;
		if (j==dim) break;
		i++;
		}
	g<<i<<"\n";
	}
	g.close();
	return 0;
}