Cod sursa(job #2352267)

Utilizator bojemoiRadu Mamaliga bojemoi Data 23 februarie 2019 10:28:47
Problema Fractii Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream>
#include<cmath>
using namespace std;

ifstream fin("fractii.in");
ofstream fout("fractii.out");

bool notPrime[1000004];
int Prime[100005], cardPrime, n;

void eratostene() {
	int SqRtN = sqrt(n);
	for (int i = 2; i <= SqRtN; ++i) {
		if (!notPrime[i]) {
			Prime[++cardPrime] = i;
			for (int j = 2 * i; j <= n; j += i) {
				notPrime[j] = true;
			}
		}
	}
	for (int i = SqRtN+1; i <= n; ++i) {
		if(!notPrime[i]) Prime[++cardPrime] = i;
	}
}


int phiEuler(int m) {
	int Product = m;
	for (int i = 1;Prime[i]!=0 && Prime[i] <= m; ++i) {
		if (m%Prime[i] == 0) {
			Product /= Prime[i];
			Product *= (Prime[i] - 1);
		}
	}
	return Product;
}



int main() {
	fin >> n;
	eratostene();
	long long nrFractii = 0;
	for (int i = 2; i <= n; ++i) {
		nrFractii+= phiEuler(i);
	}
	nrFractii *= 2;
	nrFractii += 1;
	fout << nrFractii;


	return 0;
}