Cod sursa(job #308343)

Utilizator pcinfoCarmen Popescu pcinfo Data 26 aprilie 2009 20:41:59
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <vector>


using namespace std;

ifstream f("fractii.in");
ofstream g("fractii.out");


int main()
{
	int n,i,j;
	long long s;
	vector<int> x(1000001,0);
	f>>n;
	
	for (i=2;i<=n;i++)
		x[i]=i;           // x[i] = numarul de numere <i prime cu i
	
	
	// folosim formula indicatorului lui Euler phi(n)=numarul de numere prime <n si prime cu n
	// daca n=p1^i1 * p2^i2 * ... *pk^ik     cu p1, p2, ..., pk numere prime
	// atunci phi(n) = n* (1-1/p1)*(1-1/p2)*...*(1-1/pk)
	
	s=0;
	for (i=2;i<=n;i++)
	{
		if (x[i]==i)   // i este numar prim
		{
			x[i]--;
			for (j=i+i;j<=n;j=j+i)
				x[j]=x[j]/i*(i-1);
		}
		s=s+x[i];
	}
	
	s=s*2+1;  // o fractie apare de 2 ori i/j dar si j/i
			  // si se adauga fractia 1/1
	
	g<<s;
	
	f.close();
	g.close();
	return 0;
}