Cod sursa(job #1474126)

Utilizator aimrdlAndrei mrdl aimrdl Data 20 august 2015 23:47:23
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <stdio.h>
#include <string.h>

#define MAX 1000005

int n;
bool s[MAX];
int primes[MAX];

void gensieve () {
	memset(s, 1, n+1);
	int pos = 0;
	for (int i = 2; i <= n; ++i) {
		if (s[i]) {
			primes[pos] = i;
			++pos;
			for (int j = i; j <= n; j+=i) {
				s[j] = 0;
			}
		}
	}
}
	

int totient (int x) {
	int t = x;
	for (int i = 0; primes[i] <= x && primes[i]; ++i) {
		if (x % primes[i] == 0) {	
			t = (t / primes[i]) * (primes[i] - 1);
		}
	}
	
	return t;
}
		 
	
int main (void) {
	freopen("fractii.in", "r", stdin);
	freopen("fractii.out", "w", stdout);
	
	scanf("%d", &n);
	gensieve();
	
	int r = 1;
	int s = 0;
	for (int i = 2; i <= n; ++i) {
		s += totient(i);
	}
	
	r += 2 * s;
	
	printf("%d", r);
	return 0;
}