Cod sursa(job #474322)

Utilizator Teodor94Teodor Plop Teodor94 Data 3 august 2010 13:31:39
Problema Frac Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<cstdio>

long long n,p,d[20],produs[20];
int nrp;

void citire()
{
	scanf("%lld%lld",&n,&p);
}

void desc()
{
	for (long long i=2;i*i<=n;++i)
		if (n%i==0)
		{
			while (n%i==0)
				n/=i;
			d[nrp++]=i;
		}
	if (n!=1)
		d[nrp++]=n;
}

void rez()
{
	long long i,j,max=1<<nrp,pr,q;
	for (i=0;i<max;++i)
	{
		pr=1;
		q=i;
		for (j=0;q;++j,q>>=1)
			if (q%2==1)
				pr*=-d[j];
		produs[i]=p;
	}	
}

long long functie(long long x)
{
	long long s=0;
	int max=1<<nrp,i;
	for (i=0;i<max;++i)
		s+=x/produs[i];
	return s;	
}

void cautbin()
{
	long long i=0,pas=(long long)1<<61;
	for (i=0;i;pas>>=1)
		if (functie(i+pas)<p)
			i+=pas;
	printf("%lld\n",i+1);
}

int main()
{
	freopen("frac.in","r",stdin);
	freopen("frac.out","w",stdout);
	citire();
	desc();
	rez();
	cautbin();
	return 0;
}