#include <fstream>
#include <vector>
using namespace std;

constexpr int maxn = 1e5 + 10, maxv = 1e6 + 10;

int dp[maxv], allXors[maxv] = {}, nr[maxv], aPrimeDiv[maxv] = {};

template <typename T>
static void doForDivs(int d, T&& f, int k = 1) {
    if (d == 1)
        f(k);
    else {
        int p = aPrimeDiv[d];
        int t = 0;
        while (d % p == 0) {
            d /= p;
            t++;
        }
        for (int i = 0; i <= t; ++i, k *= p) doForDivs(d, f, k);
    }
}

int main() {
    for (int i = 2; i < maxv; ++i)
        if (aPrimeDiv[i] == 0) {
            aPrimeDiv[i] = i;
            if ((long long)i * (long long)i < maxv)
                for (int j = i * i; j < maxv; j += i) aPrimeDiv[j] = i;
        }

    ifstream f("secvxor.in");
    ofstream g("secvxor.out");

    int n;
    f >> n;

    for (int i = 1, x, sp, oldSp; i <= n; ++i) {
        f >> x;
        sp ^= x;
        doForDivs(x, [&](int d) {
            dp[d] ^= allXors[d];
            dp[d] ^= (nr[d] % 2) * sp;
            ++nr[d];
            allXors[d] ^= oldSp;
        });
        oldSp = sp;
    }

    int ret = 0;
    for (int i = maxv - 1; i > 1; --i) {
        for (int j = 2 * i; j < maxv; j += i) dp[i] ^= dp[j];
        ret ^= dp[i];
    }
    g << ret << endl;
}
