Cod sursa(job #514956)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 19 decembrie 2010 22:04:58
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<fstream.h>
#define NMAX 1003
#define NMAX2 1000003

int ciur[NMAX];
int b[NMAX], n, i;
long long a[NMAX2], pos;

void ciurf()
{
	int i, j;
	for (i=2; i*i<=n; ++i)
		if (ciur[i]==0)
		{
			b[++b[0]]=i;
			for (j=i+i; j<=n; j+=i)
				ciur[j]=1;
		}
}		


long long putere(long long d, long long x)
{
	long long nr=1;
	while (x%d==0)
	{
		nr*=d;
		x/=d;
	}
	return nr;
}

long long numar(long long x)
{
	long long d, p=1, aux=x, i=1;
	d=b[1];i=1;
	while (p==1 && d*d<=x)
		if (x%d==0) p=putere(d, x);
			else {i+=1;d=b[i];}
	if (d*d>x) {d=x;p=x;}
	return p/d*(d-1)*a[aux/p];
}
	

int main()
{
	ifstream f("fractii.in");
	ofstream g("fractii.out");
	f>>n;
	ciurf(); a[1]=1;pos=1;
	for (i=2; i<=n; ++i) 
		{
			a[i]=numar(i);
			pos+=a[i]*2;
		}
	g<<pos<<"\n";
	f.close();
	g.close();
	return 0;
}