Cod sursa(job #606918)

Utilizator pllkAntti Laaksonen pllk Data 10 august 2011 13:40:12
Problema Fractii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>

#define lli long long int

int J[1000000+1];
int M[1000000+1];

int syt(int a, int b) {
    if (a % b == 0) return b;
    return syt(b, a % b);
}

int laske(int n) {
    int t, s;
    if (n == 1) return 1;
    if (M[n]) return M[n];
    if (J[n]) {
        s = syt(J[n], n / J[n]);
        t = laske(J[n]) * laske(n / J[n]) * s / laske(s);
    } else {
        t = n - 1;
    }
    M[n] = t;
    return t;
}

int main(void) {
    int i, j;
    int n;
    lli s;
    FILE *tied;
    for (i = 2; i <= 1000000; i++) {
        if (J[i]) continue;
        for (j = 2*i; j <= 1000000; j += i) {
            J[j] = i;
        }
    }
    tied = fopen("fractii.in", "r");
    fscanf(tied, "%i", &n);
    fclose(tied);
    s = 1;
    for (i = 2; i <= n; i++) {
        s = s + laske(i) * 2;
    }
    tied = fopen("fractii.out", "w");
    fprintf(tied, "%lli\n", s);
    fclose(tied);
    return 0;
}

// 6 = 1 2 5