Pagini recente » Cod sursa (job #818107) | Cod sursa (job #562013) | Cod sursa (job #1438556) | Cod sursa (job #2984954) | Cod sursa (job #1713227)
#include <bits/stdc++.h>
#define ll long long
#define Nmax 200004
using namespace std;
int t;
ll n, p, k, sol;
struct Sol
{
ll x;
ll y;
} v[Nmax];
int cmp(const Sol a, const Sol b)
{
return a.y < b.y;
}
void read()
{
scanf("%lld", &n);
}
void solve()
{
int i;
for (i = 2; i * i * 1LL <= n * 2; ++i)
if ((n * 2) % i == 0)
{
if (i * i == n * 2 && (n - ((i * (i - 1) ) / 2)) % i == 0)
{
v[++ sol].y = i;
v[sol].x = (n - ((i * (i - 1) ) / 2)) / i;
break;
}
if ((n - ((i * (i - 1) ) / 2)) % i == 0)
{
v[++ sol].y = i;
v[sol].x = (n - ((i * (i - 1) ) / 2)) / i;
}
if ((n - ((((n * 2) / i) * (((n * 2) / i) - 1) ) / 2)) % ((n * 2) / i) == 0 &&
(n - ((((n * 2) / i) * (((n * 2) / i) - 1) ) / 2)) > 0)
{
v[++ sol].y = (n * 2) / i;
v[sol].x = (n - ((((n * 2) / i) * (((n * 2) / i) - 1) ) / 2)) / ((n * 2) / i);
}
}
i = n * 2;
if ((n - ((i * (i - 1) ) / 2)) > 0)
{
v[++ sol].y = i;
v[sol].x = (n - ((i * (i - 1) ) / 2)) / i;
}
}
void write()
{
int i;
printf("%d\n", sol);
sort(v + 1, v + sol + 1, cmp);
for (i = 1; i <= sol ; ++i)
printf("%lld %lld\n", v[i].x, v[i].x + v[i].y - 1);
sol = 0;
}
int main()
{
freopen("consecutive.in", "r", stdin);
freopen("consecutive.out", "w", stdout);
scanf("%d", &t);
while (t --){
read();
solve();
write();}
return 0;
}