Cod sursa(job #812715)

Utilizator Vladinho97Iordan Vlad Vladinho97 Data 14 noiembrie 2012 11:59:56
Problema Frac Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<fstream>
#include<math.h>
using namespace std;
long long n,p,fac[30],nr=1;
bool v[12000001];
void desc()
{
	long long d,e,x=n,lim=sqrt((double)n);
	d=2;
	while(x>1&&d<=lim)
	{
		e=0;
		while(x%d==0)
		{
			x=x/d;
			e++;
		}
		if(e>0)
		{
			fac[nr]=d;
			nr++;
		}
		d++;
	}
	if(x>1)
	{
		fac[nr]=x;
		nr++;
	}
}
long long ind_euler()
{
	long long pr=n,i;
	for(i=1;i<=nr-1;i++)
		pr=pr/fac[i]*(fac[i]-1);
	return pr;
}
long long ciur()
{
	long long  x=n,i,j,numarator=0;
	for(i=1;i<=nr-1;++i)
		for(j=fac[i];j<=x;j+=fac[i])
			v[j]=true;
	for(i=1;i<=n;i++)
		if(v[i]==false)
		{
			numarator++;
			if(numarator==p)
				return i;
		}
}
int main()
{
	ifstream f("frac.in");
	ofstream g("frac.out");
	f>>n>>p;
	desc();
	long long i,ciclu;
	i=ind_euler();
	ciclu=p/i;
	p=p%i;
	if(p==0)
		p=i;
	i=ciur();
	long long num=i+ciclu*n;
	g<<num;
}