Cod sursa(job #936050)

Utilizator raulstoinStoin Raul raulstoin Data 5 aprilie 2013 13:54:18
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 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;
		for(int aux=i,d=0;d<prime.size() && prime[d]<=aux;d++)
		{
			if(binary_search(prime.begin(),prime.end(),aux))
			{
				c=aux-1;
				break;
			}
			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;
}