Cod sursa(job #2563368)

Utilizator Rares5000Baciu Rares Rares5000 Data 1 martie 2020 11:04:30
Problema Sum Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <fstream>

using namespace std;

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

int n, x;

int ind[100002];

void rez()
{
    int i, j;
    for(i = 1; i <= 100000; i++)
        ind[i] = i;
    for(i = 1; i <= 100000; i++)
        for(j = 2 * i; j <= 100000; j += i)
            ind[j] -= ind[i];
}

int main()
{
    int i;
    fin >> n;
    rez();
    for(i = 1; i <= n; i++)
    {
        fin >> x;
        fout << 1LL * 2 * x * ind[x] << "\n";
    }
    return 0;
}

/**
x-p   x   x+p
 1    6     11
 5    6      7
 ///n = (a1 ^ p1) * (a2 ^ p2) * .. (ak ^ pk)
 ///ind(n) -- nr de numere mai mici decat n, prime cu n
 ///ind(n) = n * (1 - 1/a1) * (1 - 1/a2) * .... * (1 - 1/ak)

 ///   n = 6 = 2 * 3
 ///   ind(6) = 6 * 1/2 * 2/3 = 2

 1, 2, 3, 4, 5, ..... n - 1, n

 n = 6
 1, 2, 3, 4, 5, 6

 G(i) --- multimea nr care au cu 6 cmmdc-ul i

 G(1) --- multimea nr care au cu 6 cmmdc-ul 1
 G(1) = {1, 5}

 D(6) -- multimea nr care au cu 6 cmmdc 1
 D(6) - {1, 5}



 G(2) --- multimea nr care au cu 6 cmmdc-ul 2
 G(2) = {2, 4}

 D(3) -- multimea nr care cu 3 au cmmdc 1
 D(3)  = {1, 2}




 G(3) --- multimea nr care au cu 6 cmmdc-ul 3
 G(3) = {3}

 D(2) -- multimea nr care au cu 2 cmmdc 1
 D(2) = {1}





 G(4) --- multimea nr care au cu 6 cmmdc-ul 4
 G(4) = O

 G(5) --- multimea nr care au cu 6 cmmdc-ul 5
 G(5) = O

 G(6) --- multimea nr care au cu 6 cmmdc-ul 6
 G(6) = {6}

 D(1) -- multimea nr care cu 1 au cmmdc 1
 D(1) = {1}


 n = G(1) + G(2) + G(3) + G(4)  + G(5) + G(6)

 => ind(6) = 6 - ( ind(3) + ind(2) + ind(1) )

    n = ind(a1) + ind(a2) + ind(a3) + ind(a4) + .... + ind(ak)


    ind: 1 2 3 4 5 6 7 8 9
         1 1 2 2 4 2 6 4 6

*/