Cod sursa(job #548601)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 7 martie 2011 16:57:51
Problema Frac Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<stdio.h>
#include<math.h>
#define Nmax 1000000

long long nr,p,a[Nmax],k,i,j,n,q,st=0,dr=(long long)1<<61,m;

long long pinex(long long q)
{
	long long s=0;
	
	for (int i=1;i<=(1<<nr)-1;i++)
	{
		p=-1;
		for (int j=0;j<=nr-1;j++)
 			if (i&(1<<j))
				p=p*a[j+1]*(-1);
		s+=(q/p);
	}
	return q-s;
}
	
void factori(int n)
{
	long long m=n;
	for (i=2;i<=sqrt(m);i++)
		if (n%i==0)
		{
			a[++nr]=i;
			while (n%i==0) n/=i;
			
		}
	if (n!=1) a[++nr]=n;
}


int main()
{
	freopen("frac.in","r",stdin);
	freopen("frac.out","w",stdout);
	
	scanf("%lld%lld",&n,&k);
	factori(n);

	while (st<dr)
	{
		m=(st+dr)/2;
		if (pinex(m)>=k)
		{
			q=m;
			dr=m-1;
		}
		else st=m+1;
	}
		
	printf("%lld\n",q);
	return 0;	
}