Cod sursa(job #161908)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 18 martie 2008 22:45:10
Problema GFact Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 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 k,i,j=0;
	long long max=0;
	for(i=2;i<=p;++i)
	{
		if(v[i]>0)
			for(j=i;j<=p*q;j+=i)
			{
				k=j;
				while(!(k%i))
				{
					--v[i];
					k/=i;
				}
				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<=p;++i)
		if(v[i]!=0)
			printf("%d %d\n", v[i],i);
	printf("\n");*/
	rez=solve(p,q);
	printf("%lld\n", rez);	
	return 0;	
}