Cod sursa(job #65595)

Utilizator nobodybanAna Ban nobodyban Data 11 iunie 2007 00:22:20
Problema Fractii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 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 long numar(long nr) {
	//if (prime[nr] == 0)
	//	return nr - 1;
	long 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 long suma() {
	long 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;
}