Pagini recente » Cod sursa (job #2513938) | Cod sursa (job #2281323) | Cod sursa (job #469769) | Cod sursa (job #2572788) | Cod sursa (job #1709053)
#include <iostream>
#include <fstream>
using namespace std;
/*
int n;
int a[1000024];
int countt = 0;
int wtf(int i)
{
countt++;
if (countt >= 19997) {
countt -= 19997;
}
if (i == n - 1) {
return a[i];
}
if (a[i] < wtf(i + 1)) {
return a[i];
} else {
return wtf(i + 1);
}
}
int main()
{
cin>>n;
for (int i = 0; i < n; ++i) {
cin>>a[i];
}
wtf(0);
cout<<countt<<'\n';
}
*/
unsigned long long N,T;
unsigned long long x[100000],y[100000];
unsigned long long cautbin(unsigned long long lung)
{
unsigned long long m,p,u,calc1,calc2;
p=1;
u=N-1;
while(p<=u)
{
m=(p+u)/2;
calc2=m-lung;
calc1=(m*(m+1)/2)-(calc2*(calc2+1)/2);
if(calc1==N) return m;
if(calc1>N)
{
u=m-1;
}
else p=m+1;
}
return 0;
}
int main()
{
ifstream f("consecutive.in");
ofstream g("consecutive.out");
f>>T;
unsigned long long i,lungime,rez,countt,calc,j;
for(i=1;i<=T;i++)
{
f>>N;
countt=0;
if(N%2==0)
{
lungime=3;
}
else lungime=2;
calc=(lungime)*(lungime+1)/2;
while(calc<=N)
{
rez=cautbin(lungime);
if(rez!=0)
{
countt++;
y[countt]=rez;
x[countt]=rez-lungime+1;
}
lungime++;
calc=(lungime)*(lungime+1)/2;
}
g<<countt<<'\n';
for(j=1;j<=countt;j++)
{
g<<x[j]<<" "<<y[j]<<'\n';
}
}
return 0;
}