Cod sursa(job #3318775)

Utilizator rares89_Dumitriu Rares rares89_ Data 28 octombrie 2025 19:28:55
Problema Sum Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("sum.in");
ofstream fout("sum.out");

vector<int> a(100005);

long long sum_coprime(int X) {
    vector<int> primes;
    int num = X;
    vector<int> pf;
    for(int i = 2; i * i <= num; ++i) {
        if(num % i == 0) {
            pf.push_back(i);
            while(num % i == 0) {
                num /= i;
            }
        }
    }
    if(num > 1) {
        pf.push_back(num);
    }

    long long total = 0;
    int m = pf.size();
    for(int mask = 1; mask < (1 << m); ++mask) {
        long long mul = 1;
        int bits = 0;
        for(int j = 0; j < m; ++j) {
            if(mask & (1 << j)) {
                mul *= pf[j];
                bits++;
            }
        }
        long long cnt = 2 * X / mul;
        long long sum_seq = mul * cnt * (cnt + 1) / 2;
        if(bits % 2 == 1) {
            total += sum_seq;
        } else {
            total -= sum_seq;
        }
    }

    long long sum_all = (long long) (2 * X) * (2 * X + 1) / 2;
    return sum_all - total;
}

int main() {
    int N;
    fin >> N;
    for(int i = 0; i < N; ++i) {
        fin >> a[i];
    }
    fin.close();

    for(int i = 0; i < N; ++i) {
        long long ans = sum_coprime(a[i]);
        fout << ans << "\n";
    }

    return 0;
}