Pagini recente » Cod sursa (job #876763) | Cod sursa (job #1942641) | Cod sursa (job #2744831) | Cod sursa (job #1850136) | Cod sursa (job #1709637)
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<cstdio>
#include <cmath>
#include<algorithm>
using namespace std;
struct solutie
{
int st, dr;
};
vector <long long> s;
vector < pair <long long, long long> > sol;
int nrsol;
void Sume()
{
long long maxi = pow(2, 31);
long long suma = 0;
int i;
s.push_back(0);
for (i = 1; suma<=maxi; ++i)
{
suma = suma + i;
s.push_back(suma);
}
}
int CautBin(int n)
{
int st, dr, m;
st = 1;
if (n > s.size()) dr = s.size() - 1;
else dr = n;
while (st <= dr)
{
m = (st + dr) / 2;
//printf("%d %d %d\n", st, dr, m);
if (s[m] == n) return m;
else if (s[m] < n) st = m + 1;
else if (s[m] > n) dr = m - 1;
}
return m;
}
bool Comp(solutie x, solutie y)
{
return (x.dr - x.st) < (y.dr - y.st);
}
long long alg(long long n)
{
long long d = 2;
long long nrsol = 0;
while (n / d - d / 2 >= 1)
{
long long mij = n / d;
long long st, dr;
if (d % 2 == 1)
{
st = mij - (d / 2 );
dr = mij + (d / 2);
if (dr*(dr + 1) / 2 - (st - 1)*st / 2 == n)
{
nrsol++;
sol.push_back(make_pair(st, dr));
}
}
else
{
dr = mij + (d / 2);
st = mij - (d / 2 - 1);
if (dr*(dr + 1) / 2 - (st - 1)*st / 2 == n)
{
nrsol++;
sol.push_back(make_pair(st, dr));
}
dr = mij + (d / 2 - 1);
st = mij - (d / 2 );
if (dr*(dr + 1) / 2 - (st - 1)*st / 2 == n)
{
nrsol++;
sol.push_back(make_pair(st, dr));
}
}
d++;
}
return nrsol;
}
int main()
{
freopen("consecutive.in", "r", stdin);
freopen("consecutive.out", "w", stdout);
long long test,n;
scanf("%lld", &test);
for (int t = 1; t <= test; t++)
{
scanf("%lld", &n);
sol.clear();
printf("%lld\n", alg(n));
for (long long i = 0; i < sol.size(); i++)
{
printf("%lld %lld\n", sol[i].first, sol[i].second);
}
}
}