Cod sursa(job #108908)

Utilizator GumiPipeNoName GumiPipe Data 24 noiembrie 2007 09:19:42
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>

#define MAX 1000010

int p[MAX];
long int n;

void Erastostene()
{
    long int i, j;

    for(i = 1; i <= n; i++) p[i] = 1;

    for(i = 2; i <= n; i++)
	if(p[i])
	    for(j = i + i; j <= n; j += i)
		p[j] = 0;
}

long int Tot(long int l)
{
    long int i,a; 
    float t;

    if (p[l]) t = l - 1;
    else 
    {
	t = l;
	i = 2;
	while(l != 1)
	{
	    while(p[i] == 0 || l % i != 0) i++;
	    while(l % i == 0) l /= i;
	    
	    t = t * (1 - 1/(float)i);
	}
    }
    a = (long int) t; 
    return(a);
}

int main()
{
    FILE *f;
    long long r = 0;
    long int i;

    f = fopen("fractii.in", "rt");
    fscanf(f, "%li", &n);
    fclose(f);

    Erastostene();
    
    for(i = 1; i <= n; i++) r = r + Tot(i);

    r = 2 * r + 1;

    f = fopen("fractii.out", "wt");
    fprintf(f, "%lli\n", r);
    fclose(f);

}