Cod sursa(job #2157869)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 9 martie 2018 23:16:34
Problema Consecutive Scor 0
Compilator cpp Status done
Runda Arhiva ICPC Marime 0.96 kb
#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 rez(long long n){
    v.clear();
    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));
        }
    }
    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";
}

int main()
{
    in>>t;
    long long nr;
    for(int i = 0; i < t; i++){
        in>>nr;
        rez(nr);
    }


    return 0;
}