Pagini recente » Cod sursa (job #2129414) | Cod sursa (job #218938) | Cod sursa (job #2875971) | Cod sursa (job #472640) | Cod sursa (job #1710087)
#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;
long long alg(long long n)
{
long long d = 2;
long long nrsol = 0;
int last_stg = 2;
while (last_stg > 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 || (st == 1 && (dr*(dr+1)/2 == n)))
{
nrsol++;
sol.push_back(make_pair(st, dr));
//cout << "d:" << d << "\n";
}
else
{
int suma = dr*(dr + 1) / 2 - (st - 1)*st / 2 == n || (st == 1 && (dr*(dr + 1) / 2 == n));
int x = st;
int y = dr;
while (mij > n / (d + 1))
{
mij = (st + dr) / 2;
if (suma==n)
{
nrsol++;
sol.push_back(make_pair(st, dr));
//cout << "d:" << d << "\n";
}
if (suma >= n)
{
suma -= x;
x++;
}
if (suma < n)
{
y++;
suma += y;
}
}
}
}
else
{
dr = mij + (d / 2);
st = mij - (d / 2 - 1);
if (dr*(dr + 1) / 2 - (st - 1)*st / 2 == n || (st == 1 && (dr*(dr + 1) / 2 == n)))
{
nrsol++;
sol.push_back(make_pair(st, dr));
//cout << "d:" << d << "\n";
}
else
{
int suma = dr*(dr + 1) / 2 - (st - 1)*st / 2 == n || (st == 1 && (dr*(dr + 1) / 2 == n));
int x = st;
int y = dr;
while (mij > n / (d + 1))
{
mij = (st + dr) / 2;
if (suma == n)
{
nrsol++;
sol.push_back(make_pair(st, dr));
//cout << "d:" << d << "\n";
}
if (suma >= n)
{
suma -= x;
x++;
}
if (suma < n)
{
y++;
suma += y;
}
}
}
/*
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));
}
*/
}
last_stg = st;
d++;
}
return nrsol;
}
int main()
{
freopen("consecutive.in", "r", stdin);
freopen("consecutive.out", "w", stdout);
long long n;
int test;
scanf("%d", &test);
for (int t = 1; t <= test; t++)
{
scanf("%lld", &n);
long long sq = sqrt(n);
long long nrsol = 0;
sol.clear();
for (long long k = 2; sq * 2>= k ; k++)
{
if (2 * n % k == 0)
{
long long a = (2 * n / k - k + 1) / 2;
long long b = a + k - 1;
if (b*(b + 1) / 2 - a * (a - 1) / 2 == n && a> 0)
{
if (find(sol.begin(), sol.end(), make_pair(a, b)) == sol.end())
{
nrsol++;
sol.push_back(make_pair(a, b));
}
}
}
long long save = k;
if (n%k == 0)
{
k = n / k;
if (2 * n % k == 0)
{
long long a = (2 * n / k - k + 1) / 2;
long long b = a + k - 1;
if (b*(b + 1) / 2 - a * (a - 1) / 2 == n && a > 0)
{
if (find(sol.begin(), sol.end(), make_pair(a, b)) == sol.end())
{
nrsol++;
sol.push_back(make_pair(a, b));
}
}
}
}
k = save;
}
printf("%lld\n", nrsol);
for (int i = 0; i < nrsol; i++)
{
printf("%lld %lld\n", sol[i].first, sol[i].second);
}
}
}