Cod sursa(job #388639)

Utilizator taseTanase Alexandru tase Data 30 ianuarie 2010 17:18:24
Problema Frac Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<stdio.h>
long long n,p,nrp,prim[1<<4],prod[1<<10];

long long produs(long long x)
{
	long long p=1;
	for(int i=0 ; x ; ++i,x>>=1)
		if(x&1)
			p *= -prim[i];
	return p;
}

void submultimi()
{
	int i;
	for(i=0 ; i<(1<<nrp) ; ++i)
		prod[i] = produs(i);
}

long long f(long long x)
{
	int i;
	long long s=0;
	for(i=0;i<(1<<nrp);++i)
		s+=x/prod[i];
	return s;
}

long long caut()
{
	long long i,pas = (long long)1<<61;
	for(i=0 ; pas ; pas>>=1)
		if(f(i+pas)<p)
			i+=pas;
	return 1+i;
}

int main()
{
	long long i;
	freopen("frac.in","r",stdin);
	freopen("frac.out","w",stdout);
	scanf("%lld%lld",&n,&p);
	for(i=2;i*i<=n;++i)
		if(n%i==0)
		{
			while(n%i==0)
				n/=i;
			prim[nrp++]=i;
		}
	if(n!=1)
		prim[nrp++]=n;
	submultimi();
	printf("%lld\n",caut());
	return 0;
}