Cod sursa(job #936042)

Utilizator raulstoinStoin Raul raulstoin Data 5 aprilie 2013 13:43:12
Problema Fractii Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<fstream>
#include<iostream>
#include<vector>
#include<algorithm>
#define NMAX 1000005
using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
int n;
vector<int> prime;
bool pr[NMAX];
long long sol;
void ciur()
{
	for(int i=2;i<=n;i++)
		if(!pr[i])
		{
			for(int j=i+i;j<=n;j+=i)
				pr[j]=1;
			prime.push_back(i);
		}
}
void totien()
{
	for(int i=2;i<=n;i++)
	{
		int c=i;
		if(binary_search(prime.begin(),prime.end(),i))
		{
			c=i-1;
			sol+=c;
			continue;
		}
		for(size_t aux=i,d=0;prime[d]<=aux;d++)
			if(aux%prime[d]==0)
			{
				while(aux%prime[d]==0)
					aux/=prime[d];
				c/=prime[d];
				c*=prime[d]-1;
			}
		sol+=c;
	}
	sol=sol*2+1;
}
int main()
{
	fin>>n;
	ciur();
	totien();
	fout<<sol<<'\n';
	fin.close();
	fout.close();
	return 0;
}