Cod sursa(job #975055)

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

int** sieve(int n)
{
    int **s = malloc(2 * sizeof(int*));
    s[0] = calloc((n + 2), sizeof(int));
    s[1] = calloc((n + 2), sizeof(int));

    int i,j;
    
    for (i = 2; i < n;) {
	if (!s[0][i]) {
            for (j = i; j <= n; j += i) {
	        if(s[0][j] == 0) {
                    s[0][j] = i;
                    s[1][j] = (i - 1);
	        } else {
                    s[0][j] *= i;
   	    	    s[1][j] *= (i - 1);
	        }
	    }
	}

	if (i > 2)
	    i+=2;
	else
	    i++;
    }

    return s;
}

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 ++) {
        printf("%d %d %d\n", i, s[0][i], s[1][i]);
        suma += 2 * i * s[1][i] / s[0][i];
    }

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

    fclose(f);
    fclose(g);
    free(s[0]);
    free(s[1]);
    free(s);
    return 0;
}