Cod sursa(job #52703)

Utilizator sir_icemasterGeorge Guraliuc sir_icemaster Data 19 aprilie 2007 18:47:54
Problema Fractii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
#include <math.h>
#include <time.h>
#define NMAX 1000001

int tot[NMAX], notprime[NMAX];
int np, prime[NPRIMES];
int n; 
long long sum = 1;

void searchp() {
	long i, d;
	for (i = 2; i < NMAX; ++i) {
		if (!notprime[i]) {
			tot[i] = i-1;
			for (d = 2; i * d < NMAX; ++d)
				notprime[i*d] = 1;
		}
	}
}
int main() {
	clock_t end;
	int i, j, rad;
	FILE * fi = freopen("fractii.in", "r", stdin);
	FILE * fo = freopen("fractii.out", "w", stdout);
	scanf("%ld", &n);
	searchp();
	for (i = 2; i < NMAX; ++i)
		if (!notprime[i])
			prime[np++] = i;
	for (i = 2; i < NMAX; ++i)
		if (!tot[i])
			for (j = 0, rad = sqrt(i); prime[j] < i; ++j)
				if (!(i % prime[j])) {
					if ((i/prime[j]) % prime[j] == 0)
						tot[i] = prime[j] * tot[i/prime[j]];
					else
						tot[i] = (prime[j]-1) * tot[i/prime[j]];
					break;
				}

	for (i = 2; i <= n; ++i)
		sum += 2 * tot[i];
	end = clock();
	printf("%lld\n", sum);
	return 0;
}