Pagini recente » Cod sursa (job #1183969) | Cod sursa (job #1363589) | Cod sursa (job #1307576) | Cod sursa (job #576780) | Cod sursa (job #1709879)
#include<iostream>
#include<fstream>
#include<vector>
#include<math.h>
#include<set>
using namespace std;
ifstream fin("consecutive.in");
ofstream fout("consecutive.out");
long long T, N;
long long num_sol;
long long sol_found = 0;
int main()
{
fin >> T;
for (long long t = 0; t < T; t++) {
fin >> N;
num_sol = 0;
long long s = sqrt(N);
if (N == 1) {
fout << 0 << '\n';
continue;
}
set<pair<long long, pair<long long, long long>>> st;
for (long long i = 2; i <= s; i++) {
if (N % i == 0) {
long long div = N / i;
if (i % 2 != 0) {
if ((div - (i - 1)/2) > 0) {
st.insert(make_pair(i, make_pair(div - (i - 1) / 2, div + (i - 1) / 2)));
num_sol++;
} else {
int tmp = div - (i - 1) / 2;
st.insert(make_pair(div + (i - 1) / 2 + tmp, make_pair(-tmp + 1, div + (i - 1) / 2)));
num_sol++;
}
}
if (div % 2 != 0 && div != i) {
if ((i - (div - 1) / 2) > 0) {
st.insert(make_pair(div, make_pair(i - (div - 1) / 2, i + (div - 1) / 2)));
num_sol++;
} else {
int tmp = i - (div - 1) / 2;
st.insert(make_pair(i + (div - 1) / 2 + tmp, make_pair(-tmp + 1, i + (div - 1) / 2)));
num_sol++;
}
}
}
}
if (N % 2 != 0) {
st.insert(make_pair(2, make_pair((N - 1) / 2, (N - 1) / 2 + 1)));
num_sol++;
}
fout << num_sol << '\n';
for (auto it = st.begin(); it != st.end(); ++it) {
auto p = it->second;
fout << p.first << " " << p.second << '\n';
}
}
}