Cod sursa(job #492127)

Utilizator anghel_ciprianaAnghel Cipriana anghel_cipriana Data 13 octombrie 2010 15:54:27
Problema GFact Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<cstdio>
using namespace std;
int p,q,d[20],pu[20],num=0;
void mat(int n)
{
	int i;
	for(i=2;i*i<=n;i++)
		if(n%i==0)
		{
			d[++num]=i;
			while(n%i==0)
			{
				++pu[num];
				n/=i;
			}
		}
	if(n!=1)
	{
		d[++num]=n;
		pu[num]=1;
	}
}

long put(long n,int p)
{
	long s=0;
	while(n/p!=0)
	{
		s+=n/p;
		n/=p;
	}
	return s;
}

bool ok(long n)
{
	for(int i=1 ; i<=num ; ++i)
		if(put(n,d[i])<q*pu[i])
			return false;
	return true;
}

long caut()
{         
	long i,pas=(long long)1<<29;
	for(i=0;pas!=0;pas/=2)
		if(!ok(i+pas))
			i += pas;
	return 1+i;
}

int main()
{
	freopen("gfact.in","r",stdin);
	freopen("gfact.out","w",stdout);
	scanf("%d%d",&p,&q);
	mat(p);
	printf("%ld\n",caut());
	return 0;
}