Cod sursa(job #2095270)

Utilizator AndreiBadescuBadescu Andrei-Octavian AndreiBadescu Data 27 decembrie 2017 12:26:48
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>

using namespace std;

ifstream fin ("fractii.in");
ofstream fout ("fractii.out");

int n,i,j,s,v[1000001];

int main()
{
    fin >> n;

    /// Euler's Totient
    /// presupunem ca toate numerele mai mici i sunt prime cu i
    /// adica gcd(i,x) = 1, x < i (cmmdc dintre i si un numar mai mic ca i sa fie 1)
    for ( i=2; i<=n; i++ )
        v[i] = i - 1;

    /// folosim ciurul lui Eratostene ca sa vedem
    /// numerele care nu sunt prime cu i
    /// un multiplu al lui i nu va fi prim nici
    /// cu numerele cu care nu este i prim
    for ( i=2; i<=n; i++ )
        for ( j=2*i; j<=n; j+=i )
            v[j] -= v[i];

    for ( i=1; i<=n; i++ )
        s += v[i];

    /// daca 3 e prim cu 4
    /// si 4 e prim cu 3 deci inmultim cu 2
    /// 1 este prim cu el insusi deci adaugam 1
    fout << 2 * s + 1;

    return 0;
}