Pagini recente » Cod sursa (job #3313106) | Cod sursa (job #154858) | Cod sursa (job #2335597) | Cod sursa (job #2661917) | Cod sursa (job #3318775)
#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;
}