Cod sursa(job #610218)

Utilizator IgnitionMihai Moraru Ignition Data 25 august 2011 18:52:41
Problema Fractii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.74 kb
/*
 * 002-Fractii
 * 2011-08-25
 *
 * We apply the formula phi(n) = n*(p_i - 1)/p_i
 * where p_i are all (distinct) prime divisors of n
 */

#include <stdio.h>
#include <string.h>

#define MN (1000001)


int main()
{
	int N;
	char prime[MN]; // Erathostene's xieve
	float phi[MN]; // Euler's totient function
	int i, j;
	long long S = 0;

	freopen("fractii.in", "r", stdin);
	freopen("fractii.out", "w", stdout);
	scanf("%d", &N);

	memset(prime, 0x01, sizeof(prime));
	for(i = 0; i <= N; ++i)
		phi[i] = i;

	for(i = 2; i <= N; ++i) if(prime[i]) {
		phi[i] = i-1; // i is prime
		for(j = i+i; j <= N; j += i) {
			prime[j] = 0;
			phi[j] *= (float)(i-1)/i;
		}
	}

	for(i = 2; i <= N; ++i)
		S += phi[i];
	S = 2*S+1;

	printf("%lld\n", S);

	return 0;
}