Cod sursa(job #88300)

Utilizator tvladTataranu Vlad tvlad Data 1 octombrie 2007 16:56:40
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
using namespace std;

const int N = 1000000;

vector<int> prime;
int d[N+1];

int ciur() {
	const int MX = 1000000;
	bool* pr = (bool*) malloc(sizeof(bool)*(MX+1)); memset(pr,true,sizeof(bool)*(MX-1));
	pr[0] = pr[1] = false;
	for (int i = 2; i <= MX; ++i) {
		if (pr[i]) {
			for (int j = 2; i*j <= MX; ++j) pr[i*j] = false;
			prime.push_back(i);
		}
	}
	return prime.size();
}

int phi ( int a ) {
	int r = a;
	for (int i = 0; prime[i] <= a && i < prime.size(); ++i)
		if (a % prime[i] == 0) {
			r /= prime[i];
			r *= prime[i]-1;
		}
	return r;
}

int main() {
	freopen("fractii.in","rt",stdin);
	freopen("fractii.out","wt",stdout);
	
	int n = 0;
	scanf("%d",&n);

	ciur();
	d[1] = 1;
	for (int i = 2; i <= n; ++i) d[i] = d[i-1] + 2*phi(i);
	printf("%d\n",d[n]);
	return 0;
}