Cod sursa(job #589052)

Utilizator theocmtAxenie Theodor theocmt Data 10 mai 2011 18:20:09
Problema Frac Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>

long long nr,n,m,d[20];

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

long long f(long long x)
{
	long long r=0,p;
	int i,j,par;
	for (i=0; i<((long long)1<<nr); ++i)
	{
		par=1;
		p=1;
		for (j=0; j<nr; ++j)
			if ((i & (1<<j)) != 0)
			{
				p*=d[j];
				par*=-1;
			}
		r+=x/(par*p);
	}
	return r;
}

long long caut()
{
	long long i, pas=(long long) 1<<60;
	
	for (i=0; pas!=0; pas>>=1)
	{
		//printf("%lld %lld\n",i,pas);
		if (f(i+pas)<m)
			i+=pas;
	}
	
	return i+1;
}

int main()
{
	freopen("frac.in","r",stdin);
	freopen("frac.out","w",stdout); 
	
	scanf("%lld%lld",&n,&m);
	
	desc();
	printf("%lld",caut());
	
	return 0;
}