Cod sursa(job #2835335)

Utilizator ciprian.morosanuCiprian Morosanu ciprian.morosanu Data 18 ianuarie 2022 15:42:42
Problema Fractii Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int num1;
    int num2;
} Pair;

Pair *getPrimeNumbersUntil2(int n) {
    Pair *array = (Pair *) malloc((n + 1) * sizeof(Pair));
    for (int i = 0; i < n + 1; ++i) {
        array[i].num1 = 1;
        array[i].num2 = 1;
    }
    for (int i = 2; i <= n; ++i) {
        if (array[i].num2 == 1) {
            for (int j = i; j <= n; j += i) {
                array[j].num1 *= i - 1;
                array[j].num2 *= i;
            }
        }
    }
    return array;
}

long long v5(int n) {
    if (n == 1) {
        return 1;
    }
    Pair *numbers = getPrimeNumbersUntil2(n);
    long long fractionsCount = 1;
    for (int num = 2; num <= n; ++num) {
        fractionsCount += 2 * num / numbers[num].num2 * numbers[num].num1;
    }
    free(numbers);
    return fractionsCount;
}

int main() {
    char *inFileName = "fractii.in";
    char *outFileName = "fractii.out";
    FILE *in = fopen(inFileName, "r");
    if (in == NULL) {
        printf("Cannot open %s.\n", inFileName);
        return 1;
    }
    FILE *out = fopen(outFileName, "w");
    int n;
    fscanf(in, "%d", &n);
    fprintf(out, "%lld", v5(n));
    fclose(in);
    fclose(out);
    return 0;
}