Cod sursa(job #1988659)

Utilizator trifangrobertRobert Trifan trifangrobert Data 4 iunie 2017 01:23:50
Problema Fractii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>

using namespace std;

const int dimension = 1000010;
ifstream f("fractii.in");
ofstream g("fractii.out");
bool vec[1000010];
int ciur[1000010],n;
long long s;

void Ciur()
{
	vec[0] = vec[1] = true;
	for (int i = 2;i <= dimension;i++)
	{
		if (vec[i] == false)
		{
			int k = 2;
			while (i*k <= dimension)
			{
				vec[i*k] = true;
				k++;
			}
		}
	}
	int j = 0;
	for (int i = 2;i <= dimension;i++)
		if (vec[i] == false)
			ciur[++j] = i;
}

int Number_of_specials(int x)
{
	int prod = x;
	if (x == 1)
		return 0;
	if (vec[x] == false)
		return x - 1;

	for (int i = 1; ciur[i] * ciur[i] <= x; i++)
	{
		if (x % ciur[i] == 0)
		{
			prod = prod - prod/ciur[i];
			while (x % ciur[i] == 0)
				x /= ciur[i];
		}
	}
	if (x != 1)
		prod = prod-prod/x; 
	return prod;
}

long long Number_of_fractions(int n)
{
	for (int i = 1;i <= n;i++)
		s += Number_of_specials(i);
	return 2*s+1;
}

int main()
{
	Ciur();
	f >> n;
	g << Number_of_fractions(n) << "\n";
	f.close();
	g.close();
	return 0;
}