Pagini recente » Cod sursa (job #3149688) | Cod sursa (job #321179) | Stalpisori | Cod sursa (job #1177968) | Cod sursa (job #1708985)
#include <bits/stdc++.h>
#define NMax 100000
#define ll long long
using namespace std;
ifstream f("consecutive.in");
ofstream g("consecutive.out");
struct ans{
ll prim,ultim;
}sol[NMax];
ll t,n,nr;
int main()
{
f >> t;
for(ll count = 1; count <= t; ++count){
f >> n;
ll rad = sqrt(2 * n);
nr = 0;
for(ll i = 2; i <= rad;i ++){
ll lo = 1, hi = n / 2;
while(lo <= hi){
ll mij = (lo + hi)/2;
if(mij * i + (i - 1) * i / 2 == n){
sol[++nr].prim = mij;
sol[nr].ultim = mij + i - 1;
break;
}else
if((mij + mij + i - 1) * i / 2 < n){
lo = mij + 1;
}else
if((mij + mij + i - 1) * i / 2 > n){
hi = mij - 1;
}
}
/*
while(lo <= hi){
int mij = (lo + hi)/2;
if((mij + mij + i - 1) * i / 2 == n){
sol[++nr].prim = mij;
sol[nr].ultim = mij + i - 1;
break;
}else
if((mij + mij + i - 1) * i / 2 < n){
lo = mij + 1;
}else
if((mij + mij + i - 1) * i / 2 > n){
hi = mij - 1;
}
} */
}
g << nr << '\n';
for(ll i = 1; i <= nr; ++i){
g << sol[i].prim << ' ' << sol[i].ultim << '\n';
}
}
return 0;
}