Pagini recente » Cod sursa (job #18813) | Cod sursa (job #2087535) | Cod sursa (job #1094096) | Cod sursa (job #874990) | Cod sursa (job #2455931)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("consecutive.in");
ofstream g("consecutive.out");
long long N;
vector <pair <long long, long long> > Sol;
void Solve(){
for(int i = 1; 1LL * i * i <= N; i++){
if(N % i == 0){
long long diff = i;
long long sum = N / i - 1;
if((sum + diff) % 2 == 0){
long long x = (sum + diff) / 2;
long long y = x - diff;
if(x >= 0 && y >= 0){
Sol.push_back(make_pair(y + 1, x));
}
}
diff = N / i;sum = i - 1;
if((sum + diff) % 2 == 0){
long long x = (sum + diff) / 2;
long long y = x - diff;
if(x >= 0 && y >= 0){
Sol.push_back(make_pair(y + 1, x));
}
}
}
}
}
void Print(pair <long long, long long> sol){
if(sol.first == sol.second)
return;
g << sol.first << ' ' << sol.second << '\n';
}
int main()
{
int T;
f >> T;
while(T--){
f >> N;
N *= 2;
Solve();
g << Sol.size() - 1 << '\n';
sort(Sol.begin(), Sol.end());
reverse(Sol.begin(), Sol.end());
N /= 2;
for(int i = 0; i < Sol.size(); i++)
Print(Sol[i]);
Sol.clear();
}
return 0;
}