Cod sursa(job #65596)

Utilizator nobodybanAna Ban nobodyban Data 11 iunie 2007 00:26:38
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>

using namespace std;

// int prime[1000002];
long n;



void citire() {
	ifstream in("fractii.in");
	in >> n;	
}

//void gen_prime() {
//	// 1 nu e prim
//	// 0 e prim
//	prime[1000000] = 1;
//	for (long d = 3; d < 1000000; d+=2) {
//		prime[d - 1] = 1;
//		if (prime[d] == 0)
//			for (long v= 2; v*d < 1000000; v++)
//				prime[d * v] = 1;
//	}
//}


long numar(long nr) {
	//if (prime[nr] == 0)
	//	return nr - 1;
	long  p = nr;
	
	if (nr % 2 == 0)
		p /=  2;
	while (nr % 2 == 0) 
		nr >>= 1;
	for (long d = 3; d <= nr / d; d +=2) {
		
		if (nr % d == 0 )
			p = p * (d - 1) / d;
		while (nr % d == 0) nr /=d ;
	}
	if (nr > 1)
		p = p * (nr - 1) / nr;
	return p;
}

long suma() {
	long  s = 0;
	for (int i = 2; i <= n; i++)
		s += numar(i);
	return 1 + (s << 1);
} 

int main() {
	citire();
	ofstream out("fractii.out");
///	gen_prime();
	out << suma(); 
	out.close();
	return 0;
}