Cod sursa(job #161891)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 18 martie 2008 22:22:12
Problema GFact Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
#include <math.h>
#define N 2000000
int v[N];
void descompune(int p)
{
	int x=p;
	for(int i=2;i<=x;++i)
	{
		if(p<=1) break;
		while(!(p%i))
		{
			++v[i];
			p/=i;
		}
	}
}	
void ridica_la_putere(int p, int q)
{
	int i;
	for(i=2;i<=p;++i)
		if(v[i]!=0)
			v[i]*=q;
}		
long long solve(int p, int q)
{
	int max=0,k,i,j;
	for(i=2;i<=p;++i)
	{
		if(v[i]!=0)
			for(j=2;j<=p*q;j+=i)
			{
				k=j;
				while(!(k%i))
				{
					--v[i];
					k/=i;
				}
				//printf("%d ", j);
				if(v[i]<=0)
					break;
			}
		if(j>max) max=j;	

	}
	return max;
}	
int main()
{
    int p,q;
	long long rez;
	freopen("gfact.in", "r",stdin);
	freopen("gfact.out", "w",stdout);
	scanf("%d %d", &p, &q);
	descompune(p);
	ridica_la_putere(p,q);
	/*for(int i=2;i<=10;++i)
		printf("%d ", v[i]);
	printf("\n");*/
	//q=1;
	//for(int i=2;i<=10;++i)
	//	q*=pow(i,v[i]);
	//printf("%d", q);
	rez=solve(p,q);
	printf("%lld\n", rez);	
	return 0;	
}