Cod sursa(job #512645)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 14 decembrie 2010 09:33:18
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<fstream.h>

long long a[1000001], nr;
int n, i, c[1001], prim[1001], m;

void ciur(int n)
{
	int i, j;
	for (i=2; i<=n; ++i)
		if (c[i]==0)
		{
			prim[++m]=i;
			for (j=i+i; j<=n; j+=i)
				c[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 fi(long long x)
{
	long long d=2, p=1, aux=x;
	if (x%2==0) p=putere(2, x);
	else
	{
		d=2;
		while (p==1 && prim[d]*prim[d]<=x)
		if (x%prim[d]==0) p=putere(prim[d], x);
			else d+=1;
		if (prim[d]*prim[d]>x) {d=x;p=x;}
		else d=prim[d];
	}
	return p/d*(d-1)*a[aux/p];
}

int main()
{
	ifstream f("fractii.in");
	ofstream g("fractii.out");
	f>>n;
	int nn=sqrt(n);
	ciur(nn);
	a[1]=1;
	for (i=2; i<=n; ++i)
		a[i]=fi(i);
	nr=1;
	for (i=2; i<=n; ++i) nr+=2*a[i];
	g<<nr<<"\n";
	f.close();
	g.close();
}