Cod sursa(job #2120182)

Utilizator calinstefan21Bocu Calin calinstefan21 Data 2 februarie 2018 00:18:23
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<cstdio>

using namespace std;

FILE *fin = fopen( "fractii.in" , "r" ), *fout = fopen( "fractii.out" , "w" );

const int nmax = 1000000;

long long s;
long long e[ nmax + 1 ];

void calc( int n ) {
    /// numar doar fractiile ireductibile
    /// initial pp numarator < numitor (fie x si y)
    /// d(x, y) = 1
    /// cate x exista pt un y? fix phi(y) = indicatorul lui euler
    /// care se calculeaza cu formula de pe wiki

    for( int i = 2; i <= n; ++ i ) {
        e[ i ] = i;
    }

    for( int i = 2; i <= n; ++ i ) {
        if (e[ i ] == i) {
            for( int j = i; j <= n; j += i ) {
                e[ j ] = e[ j ] / i * (i - 1);
            }
        }
    }

    /// aflu cate sunt in total cu x < y, y >= 2
    for( int i = 2; i <= n; ++ i ) {
        s += e[ i ];
    }
}

int main() {
    int n;
    fscanf( fin, "%d", &n );
    calc( n );

    /// ans = 2 * s + 1
    /// pt ca exista si cele cu x > y (nr egal cu x < y)
    /// si 1 / 1 pe care n am luat-o in considerare in s

    fprintf( fout, "%lld\n", 2 * s + 1 );
    fclose( fin );
    fclose( fout );
    return 0;
}