Cod sursa(job #264289)

Utilizator moonbeamElma Moonbeam moonbeam Data 21 februarie 2009 21:08:27
Problema Frac Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<stdio.h>
#include<stdlib.h>
#define N 10000
long long v[N];
struct milk{long long a;}y[N];
long long num,n,nr;
inline int descompun (int x)
{
	double cx=x;
	v[num++]=1;
	for (long long i=2; i*i<=x; ++i)
	{
		bool ok=false;
		while (x%i==0)
		{
			ok=true;
			x/=i;
		}
		if(ok)
		{
			v[num++]=i;
			cx*=(double)(i-1)/i;
		}
	}
	if (x>1)
	{
		v[num++]=x;
		cx*=(double)(x-1)/x;
	}
	x=(long long)cx;
	return x;
}
bool verific(long long x)
{
	for (long long i=1; i<num; ++i)
		if (x%v[i]==0)
			return false;
	return true;
}
int compar(const void*p,const void *q)
{
	milk pp=*(milk*)p,qq=*(milk*)q;
	if (pp.a>qq.a) return 1;
	if (pp.a<qq.a) return -1;
	return 0;
}
void citire()
{
	freopen("frac.in","r",stdin);
	freopen("frac.out","w",stdout);
	scanf("%lld%lld",&n,&nr);
	long long nrp=descompun(n);
	long long i=0,j=0;
	while (nrp)
	{
		++i;
		if (verific(i))
		{
			y[j++].a=i;
			y[j++].a=i+n;
			--nrp;
		}
	}
	qsort(y,j,sizeof(y[0]),compar);
	/*for (int i=0; i<j; ++i)
		printf("%lld ",y[i].a);*/
	printf("%lld",y[nr-1].a);
}
int main()
{
	citire();
	return 0;
}