#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define all(x) (x).begin(), (x).end()
#define pb push_back
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
void solve() {
ll n;
cin >> n;
vector<ll> a(n);
ll ans = 0;
for (ll i = 0; i < n; i++) {
cin >> a[i];
ans ^= a[i];
}
vector<ll> xorr(n + 1);
xorr[0] = 0;
for (ll i = 1; i <= n; i++) {
xorr[i] = i ^ xorr[i - 1];
}
for (ll i = 1 ; i<= n; i++) {
// ll diff = n-i ;
//if (diff&1) ans^=i;
ll nb=n/i , MOD = n%i;
if (nb&1) ans^=xorr[i-1];
ans^=xorr[MOD];
}
cout << ans << endl;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll t = 1;
//cin >> t;
while (t--) solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCAoeCkuZW5kKCkKI2RlZmluZSBwYiBwdXNoX2JhY2sKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KdXNpbmcgb3JkZXJlZF9zZXQgPSB0cmVlPFQsIG51bGxfdHlwZSwgbGVzczxUPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47CgoKdm9pZCBzb2x2ZSgpIHsKICAgIGxsIG47CiAgICBjaW4gPj4gbjsKICAgIHZlY3RvcjxsbD4gYShuKTsKICAgIGxsIGFucyA9IDA7CgogICAgZm9yIChsbCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGNpbiA+PiBhW2ldOwogICAgICAgIGFucyBePSBhW2ldOwogICAgfQogICAgdmVjdG9yPGxsPiB4b3JyKG4gKyAxKTsKICAgIHhvcnJbMF0gPSAwOwogICAgZm9yIChsbCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICB4b3JyW2ldID0gaSBeIHhvcnJbaSAtIDFdOwogICAgfQoKCiAgICBmb3IgKGxsIGkgPSAgMSA7IGk8PSBuOyBpKyspIHsKICAgICAgLy8gIGxsIGRpZmYgPSBuLWkgOwogICAgICAgIC8vaWYgKGRpZmYmMSkgYW5zXj1pOwogICAgICAgIGxsIG5iPW4vaSAgLCBNT0QgPSBuJWk7CiAgICAgICAgaWYgKG5iJjEpIGFuc149eG9ycltpLTFdOwogICAgICAgIGFuc149eG9ycltNT0RdOwoKICAgIH0KCgogICAgY291dCA8PCBhbnMgPDwgZW5kbDsKfQoKaW50IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICBsbCB0ID0gMTsKICAgIC8vY2luID4+IHQ7CgogICAgd2hpbGUgKHQtLSkgc29sdmUoKTsKICAgIHJldHVybiAwOwp9