Pagini recente » Cod sursa (job #1100659) | Cod sursa (job #2734514) | Cod sursa (job #2139699) | Cod sursa (job #3005672) | Cod sursa (job #1973752)
#include <bits/stdc++.h>
using namespace std;
const string name = "consecutive",
in_file = name + ".in",
out_file = name + ".out";
ifstream fin(in_file);
ofstream fout(out_file);
int t;
long long n;
vector<pair<long long, long long> > all;
bool func(pair<long long, long long> a, pair<long long, long long> b) {
//sortam solutiile dupa lungimea intervalului
return (a.second - a.first) < (b.second - b.first);
}
void solveSystem(long long i) {
//pe fiecare divizor al lui 2*N rezolvam sitemul
long long a = min(i, 2 * n / i), b = max(i, 2 * n / i);
if ((b - a - 1) % 2 != 0 || (b + a - 1) % 2 != 0)
return;
all.push_back(make_pair((b - a - 1) / 2 + 1, (b + a - 1) / 2));
}
int main() {
fin >> t;
while(t--) {
fin >> n;
all.clear();
for (long long i = 2; (1LL * i * i) <= 2 * n; i++)
if ((2 * n) % i == 0)
solveSystem(i);
sort(all.begin(), all.end(), func);
fout << all.size() << "\n";
for (auto p : all)
fout << p.first << " " << p.second << "\n";
}
return 0;
}