Cod sursa(job #1184158)

Utilizator hrazvanHarsan Razvan hrazvan Data 11 mai 2014 16:15:09
Problema Fractii Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>
#define N_MAX 1000000
#define NR_PRIME 100000
int v[ NR_PRIME ], ind = 0;

void ciur ( int n ){
    char prim[ n ];
    int i, j;
    for ( i = 2; i <= n; i++ )  prim[ i ] = 0;
    for ( i = 2; i <= n; i++ ){
        if ( !prim[ i ] ){
            v[ ind ] = i;
            ind++;
            for ( j = i * i; j <= n; j += i ){
                prim[ i ] = 1;
            }
        }
    }
    return ;
}

int phi ( int n ){
    int i, rez = 1, primul;
    for ( i = 0; i < ind; i++ ){
        primul = 1;
        while ( n % v[ i ] == 0 ){
            n /= v[ i ];
            if ( primul ){
                rez *= v[ i ] - 1;
            }
            else{
                rez *= v[ i ];
            }
            primul = 0;
        }
    }
    return rez;
}

int main()
{
    FILE *in = fopen ( "fractii.in", "r" );
    int n;
    fscanf ( in, "%d", &n );
    fclose ( in );
    ciur ( n );
    long long rez = 1;
    int i;
    for ( i = 2; i <= n; i++ ){
        rez += 2 * phi ( i );
    }
    FILE *out = fopen ( "fractii.out", "w" );
    fprintf ( out, "%lld", rez );
    fclose ( out );
    return 0;
}