Cod sursa(job #2500229)

Utilizator radustn92Radu Stancu radustn92 Data 27 noiembrie 2019 15:34:19
Problema Fractii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#include <bitset>
#include <vector>
using namespace std;

const int NMAX = 1000505;
bitset<NMAX> notPrime;
int N;

vector<int> pr;
int lp[NMAX], phi[NMAX];

void precomputeTotientFunction() {
	for (int i = 2; i < NMAX; i++) {
		if (lp[i] == 0) {
			lp[i] = i;
			phi[i] = i - 1;
			pr.push_back(i);
		}

		for (int j = 0; j < pr.size() && pr[j] <= lp[i] && pr[j] * i < NMAX; j++) {
			lp[i * pr[j]] = pr[j];
			// 1st time
			if (pr[j] < lp[i]) {
				phi[i * pr[j]] = phi[i] * phi[pr[j]];
			} else {
				phi[i * pr[j]] = phi[i] * pr[j];
			}
		}
	}
	printf("%d\n", lp[6]);
}

int main() {
	freopen("fractii.in", "r", stdin);
	freopen("fractii.out", "w", stdout);

	precomputeTotientFunction();
	scanf("%d", &N);
	long long result = 0;
	for (int i = 2; i <= N; i++) {
		result += phi[i] * 2;
	}

	// add 1 / 1 once only
	printf("%lld\n", result + 1);
	return 0;
}