Cod sursa(job #232471)

Utilizator SilverMoonFeier Vlad SilverMoon Data 15 decembrie 2008 15:24:50
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
// pb003.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"
#include "stdio.h"
#include "math.h"

#define MAX 1000001
bool prime[MAX] = { 0 };

void GenPrime()
{
	long i, j;
	//for (i = 1; i <= MAX; i++) prime[i] = 0;

	for (i = 3; i <= MAX; i += 2) if (!prime[i])
	{
		for (j = i * 2; j <= MAX; j += i) prime[j] = true;
	}
}

long long fi(long n) 
{ 
	long long result = 0; 
	long d = 2, p = 0;
	
	if (n == 1) return 1;
	if ((!prime[n]) &&(n % 2)) return n - 1;
	while (n % d) d++;
	while (n % d == 0) 
	{
		n /= d; p++;
	}

	result += (long long)pow((double)d, (double)(p - 1)) * (d - 1) * fi(n);
    
    return result; 
} 


int main()
{
	FILE *fin = fopen("fractii.in", "rt");
	if (!fin) return 0;

	long n = 0, i;
	fscanf(fin, "%ld", &n);

	fclose(fin);

	GenPrime();

	long long r = 1;

	for (i = 2; i <=n; i++) r += (fi(i) * 2);

	FILE *fout = fopen("fractii.out", "wt");
	if (!fout) return 0;

	fprintf(fout, "%lld", r);

	fclose(fout);

	return 0;
}