Untitled

 avatar
user_7653193
c_cpp
a month ago
2.2 kB
8
Indexable
Never
#include <bits/stdc++.h>

#define int long long
#define ll long long
#define II pair<int, int>
#define fs first
#define sc second
#define endl '\n'

#define mp(x, y) make_pair(x, y)
#define sz(x) ((int) (x.size()))
#define forlr(i, l, r) for(int i = l; i <= r; ++i)
#define forrl(i, r, l) for(int i = r; i >= l; --i)
#define show(v) for(auto i : v) cout << i << " "; cout << endl;
#define showlr(v, l, r) for (int i = l; i <= r; i++) cout << v[i] << " "; cout << endl;
#define all(v) v.begin(), v.end()
#define Unique(v) v.erase(unique(all(v)), v.end());

const long long LINF = 1ll << 60;
const int INF = 1 << 30;
const int N = 1e6 + 10;

using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); 

bool last_subtask;
int q, n = 1000008;
int a[N], ans[N];

int cnt[N];

void Sub123() {
    forlr(i, 1, n) {
        for(int j = i; j <= n; j += i) cnt[j] += i;
    }

    forlr(i, 1, q) cout << cnt[a[i]] << " ";
    cout << endl;
}

bool nonPrime[N];

void Sub4() {
    int L = a[1], R = a[q];

    nonPrime[2] = false;
    for(int i = 4; i <= n; i += 2) nonPrime[i] = true; 
    for(int i = 3; i <= n; i += 2) {
        if(!nonPrime[i]) {
            for(int j = i * i; j <= n; j += i) {
                nonPrime[j] = true;
            }
        }
    }

    forlr(prime, 2, n) {
        if(nonPrime[prime]) continue;
        for(int j = ((L + prime - 1) / prime) * prime; j <= R; j += prime) {
            int x = a[j - L + 1], cp = 1;
            while(x % prime == 0) x /= prime, cp *= prime;
            ans[j - L + 1] *= (cp * prime - 1) / (prime - 1);
            a[j - L + 1] = x;
        }
    }

    forlr(i, 1, q) {
        if(a[i] != 1) ans[i] *= a[i] + 1;
        cout << ans[i] << " ";
    }
    cout << endl;
}

int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    cin >> q;

    last_subtask = true;
    forlr(i, 1, q) {
        cin >> a[i];

        ans[i] = 1;
        if(i > 1 && a[i] != a[i - 1] + 1) last_subtask = false;
    }

    if(!last_subtask) Sub123();
    else Sub4();

    return 0;
}
Leave a Comment