Cod sursa(job #590872)

Utilizator cr1st18Cristi cr1st18 Data 20 mai 2011 19:38:49
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<fstream>
#define NrP 1000 
using namespace std;

int primes[NrP],phi[1000000],p[1000000];
int nr = 1;

void GetPrimes(int n)
{
	int i,j;
	
	for(i=2;i<=n;i++)
		if(p[i] == 0)
		{
			nr++;
			primes[nr] = i;
			for(j = 2*i;j<=n;j+=i)
				p[j] = 1;
		}
}

int main()
{
	int i,j,n,s = 0,ct,x,val;
	
	ifstream fin("fractii.in");
	ofstream fout("fractii.out");
	
	fin>>n;		
	GetPrimes(n);		
    s = 1;
	primes[1] = 1;
	phi[1] = 1;

	for(i=2;i<=n;i++)
	{
		if(p[i] == 0)
		{
			phi[i] = i-1;
			s+=phi[i];
		}
		else
		{
			x = 1;
			j = 2;
			while(j<=nr && (i%primes[j]))
				j++;
			val = i;
			while(val!=1 && val%primes[j] == 0)
				{
					val = val/primes[j];
					x = x*primes[j];
				}
			phi[i] = (x - x/primes[j])*phi[i/x];
			s+=phi[i];
		}
	}
fout<<2*s-1<<"\n";

return 0;
}