Cod sursa(job #974964)

Utilizator stefanfStefan Fulger stefanf Data 18 iulie 2013 19:57:35
Problema Fractii Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int* sieve(int n)
{
    int *s = calloc((n + 2), sizeof(int));

    int i,j;
    
    for (i = 2; i <= sqrt(n); i++)
        for (j = i * i; j <= n; j += i)
            s[j] = 1;

    return s;
}

int indicator(int* s, int ind)
{
    int i;
    int nr = ind;
    for (i = 2; i <= ind; i++)
        if (!s[i] && ind % i == 0)
        {
            nr = nr / i;
            nr *= (i - 1);
        }

    return nr;
}

int main()
{
    FILE *f = fopen("fractii.in", "r");
    FILE *g = fopen("fractii.out", "w");

    int n;
    fscanf(f, "%d", &n);

    int *s = sieve(n);

    int i;
    int suma = 1;
    for (i = 2; i <= n; i ++) {
        suma += indicator(s, i) * 2;
    }

    fprintf(g,"%d\n", suma);

    fclose(f);
    fclose(g);
    free(s);
    return 0;
}