Cod sursa(job #492128)

Utilizator MateimMilitaru Matei Mateim Data 13 octombrie 2010 15:54:45
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<fstream>
using namespace std;
int p,q,di[20],po[20],nr=0;
void mat(int n)
{
	int i;
	for(i=2;i*i<=n;i++)
		if(n%i==0)
		{
			di[++nr]=i;
			while(n%i==0)
			{
				++po[nr];
				n/=i;
			}
		}
	if(n!=1)
	{
		di[++nr]=n;
		po[nr]=1;
	}
}

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

bool ok(long long n)
{
	for(int i=1 ; i<=nr ; ++i)
		if(putere(n,di[i])<q*po[i])
			return false;
	return true;
}

long long caut()
{
	long long i,pas=(long long)1<<60;
	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("%lld",caut());
	return 0;
}