Cod sursa(job #1915190)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 8 martie 2017 20:07:03
Problema Sum Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fi("sum.in");
ofstream fo("sum.out");

using i64 = long long;

const int NMAX = 1e5 + 5;

i64 c[NMAX];
int px[NMAX];
bool p[NMAX];

void pinex() {
    p[0] = p[1] = 1;
    for (int i = 4; i < NMAX; i+= 2)
        p[i] = 1;
    for (int i = 3; i * i < NMAX; i+= 2) if (!p[i])
        for (int j = i * i; j < NMAX; j+= 2 * i)
            p[j] = 1;

    for (int i = 2; i < NMAX; ++i)
        px[i] = 1;
    for (int i = 2; i * i < NMAX; ++i)
    for (int j = i * i; j < NMAX; j+= i * i)
        px[j] = 0;

    for (int i = 2; i < NMAX; ++i) if (!p[i])
    for (int j = i; j < NMAX; j+= i)
        px[j]*= -1;

    for (int i = 2; i < NMAX; ++i) if (px[i])
    for (int j = i; j < NMAX; j+= i)
        c[j]+= (2LL * j / i) * (2LL * j / i + 1) / 2 * i * px[i]; }

int main() {
    int n, t;

    pinex();

    fi >> n;
    while (n--) {
        fi >> t;
        fo << (2LL * t) * (2LL * t + 1) / 2 + c[t] << '\n'; }

    return 0; }