Pagini recente » Cod sursa (job #902145) | Cod sursa (job #1710746) | Cod sursa (job #2576041) | Clasament 007 | Cod sursa (job #2158484)
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("consecutive.in");
ofstream out("consecutive.out");
long long t;
vector<pair<int,int> >v;
long long a,b;
long long ok(long long x){
long long pas = 1<<30, r = 0;
while(pas){
if((r+pas)*(r+pas+1) <= x)
r += pas;
pas /= 2;
}
if(r*(r+1) == x)
return r;
return 0;
}
void brut(long long n){
v.clear();
int x = 2;
for(a = 1; a <= n/2; a ++){
b = 2*n + a*(a-1);
if(ok(b)){
b = ok(b);
v.push_back(make_pair(a,b));
a = a + x;
x++;
}
}
reverse(v.begin(),v.end());
out<<v.size()<<"\n";
for(int i = 0; i < v.size(); i++)
out<<v[i].first<<" "<<v[i].second<<"\n";
}
bool e_bine(long long x,long long n){
if((2*n) % (x+1) == 0 && (2*n/(x+1) - x) % 2 == 0) {
a = (2*n/(x+1)- x)/2;
b = x + a;
return true;
}
return false;
}
void rez(long long n){
v.clear();
int x;
for(x = 1; x*x <= n+1; x ++)
if(e_bine(x,n))
v.push_back(make_pair(a,b));
out<<v.size()<<"\n";
for(int i = 0; i < v.size(); i++)
out<<v[i].first<<" "<<v[i].second<<"\n";
}
int main()
{
in>>t;
long long nr;
for(int i = 0; i < t; i++){
in>>nr;
rez(nr);
}
return 0;
}