Cod sursa(job #1463879)

Utilizator EpictetStamatin Cristian Epictet Data 21 iulie 2015 18:38:54
Problema Sum Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <fstream>
#include <vector>

using namespace std;

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

int N, X_1, X_2, F[200010];
vector < int > P;
bool viz[200010];

void Eratostene()
{
    P.push_back(2);
    for (int i = 2; i <= 2000; i += 2) viz[i] = true;
    for (int i = 3; i <= 2000; i += 2)
    {
        if (!viz[i])
        {
            P.push_back(i);
            for (int j = i * 3; j <= 2000; j += i)
            {
                viz[j] = true;
            }
        }
    }
}

int main()
{
    Eratostene();
    fin >> N;
    for (int i = 1; i <= N; i++)
    {
        fin >> X_1;
        X_2 = X_1 * 2;
        int sum = (X_2 * (X_2 + 1)) / 2;

        vector < int > D;
        int p = 0;
        while (X_1 != 1 && p < P.size())
        {
            if (X_1 % P[p] == 0)
            {
                for (int j = P[p]; j <= X_2; j += P[p])
                {
                    if (F[j] != i)
                    {
                        sum -= j;
                        F[j] = i;
                    }
                }

                while (X_1 % P[p] == 0)
                {
                    X_1 /= P[p];
                }
            }
            p ++;
        }
        if (X_1 != 1)
        {
            for (int j = X_1; j <= X_2; j += X_1)
            {
                if (F[j] != i)
                {
                    sum -= j;
                    F[j] = i;
                }
            }
        }
        fout << sum << '\n';
    }

    return 0;
}