Pagini recente » Cod sursa (job #615743) | Cod sursa (job #2037629) | Cod sursa (job #1916154) | Cod sursa (job #1667279) | Cod sursa (job #3311593)
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define ll long long
#define ld long double
using namespace std;
using namespace __gnu_pbds;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
ifstream fin("sum.in");
ofstream fout("sum.out");
const int NMAX = 2e5;
int n;
int big_prime[NMAX + 1];
void eratostene() {
for(int i = 2; i <= NMAX; i++) {
if(!big_prime[i]) {
for(int j = i; j <= NMAX; j += i) {
big_prime[j] = i;
}
}
}
}
ll get_prog_sum(int n, int x) {
if(x > n) {
return 0;
}
// a0 = x, r = x
// sum_n = (x + ultimul) * nr_termeni / 2
int last = n / x * x;
int cnt_terms = (last - x) / x + 1;
return (ll) (x + last) * cnt_terms / 2;
}
ll solve(int n) {
int cn = n;
vector<int> factors;
while(n > 1) {
int d = big_prime[n];
factors.push_back(d);
while(n % d == 0) {
n /= d;
}
}
n = cn * 2;
int sz = factors.size();
ll answer = get_prog_sum(n, 1);
for(int mask = 1; mask < (1 << sz); mask++) {
int prod = 1, cnt = 0;
for(int i = 0; i < sz; i++) {
if(mask >> i & 1) {
cnt++;
prod *= factors[i];
}
}
answer = answer + (cnt % 2 == 1 ? -1 : 1) * get_prog_sum(n, prod);
}
return answer;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
eratostene();
fin >> n;
while(n--) {
int x;
fin >> x;
fout << solve(x) << '\n';
}
return 0;
}