Cod sursa(job #188736)

Utilizator scvrentScvrent Alexdrei scvrent Data 9 mai 2008 20:31:01
Problema Sum Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <fstream>

using namespace std;

/*
 * O problema complicata,
 * De matematica rezolvata,
 * C-o formula foarte simpla,
 * Nu rima!
 *
 * solutie = 2 * phi(X) - X
 *         unde
 *             X = numarul dat in enunt
 *             phi(X) = functia phi a lui Euler (ie numarul
 *                      de numere prime cu X mai mici ca X)
 */

int N, X;

long long phi[200001];

int main(int argc, char *argv[]) 
{
	for (int i(1); i < 200001; ++i)
		phi[i] = i;
	for (int i(2); i < 200001; ++i)
		if (phi[i] == i)
			for (int j = i; j < 200001; j += i) {
				phi[j] /= i;
				phi[j] *= i-1;
			}

	FILE *fi = fopen("sum.in", "r");
	fscanf(fi, "%d", &N);
	FILE *fo = fopen("sum.out", "w");
	while (N--) {
		fscanf(fi, "%d", &X);
		fprintf(fo, "%lld\n", 2*phi[X]*X);
      	}
	fclose(fo);
	fclose(fi);

	return 0;
}