Cod sursa(job #3181705)

Utilizator AswVwsACamburu Luca AswVwsA Data 7 decembrie 2023 18:48:05
Problema Sum Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <vector>
#define ll long long
using namespace std;

const int VMAX = 1e5;

vector <int> g[VMAX + 1];
ll ans[VMAX + 1];

void ciur()
{
    int i, j;
    for (i = 2; i <= VMAX; i++)
        if (g[i].empty())
            for (j = i; j <= VMAX; j += i)
                g[j].push_back(i);
}

ll gauss(int val)
{
    return 1LL * val * (val + 1) / 2;
}

void solve()
{
    int i, j;
    ciur();
    for (i = 2; i <= VMAX; i++)
    {
        ans[i] = gauss(2 * i);
        for (int msk = 1; msk < (1 << g[i].size()); msk++)
        {
            int prod = 1;
            int cnt = 0;
            for (j = 0; j < g[i].size(); j++)
                if (msk & (1 << j))
                {
                    prod *= g[i][j];
                    cnt++;
                }
            int pinex[2] = {1, -1};
            int nr = 2 * i / prod;
            ans[i] += pinex[cnt & 1] * (gauss(nr) * prod);
        }
    }
}

signed main()
{
    ifstream cin("sum.in");
    ofstream cout("sum.out");
    //ios_base :: sync_with_stdio(0);
    //cin.tie(0);
    solve();
    int q;
    cin >> q;
    while (q--)
    {
        int x;
        cin >> x;
        cout << ans[x] << "\n";
    }
}