Method:
1. Analyze for the first input:
SUM[X-Y] means summation of all the numbers from X to Y.
It's clear that
SUM[1-5] = SUM[1-8] - SUM[1-6]
So, 5*(5+1)/2 = 8*(8+1)/2 - 6*(6+1)/2
Now, think of 6 as Y, 5 as Y-1 and 8 as X.
So, we get
==> (Y-1)*(Y-1+1)/2 = X*(X+1)/2 - Y*(Y+1)/2
==> (Y-1)*Y/2 = X*(X+1)/2 - Y*(Y+1)/2
==> Y(Y-1) = X(X+1) - Y(Y+1)
==> Y(Y-1) + Y(Y+1) = X(X+1)
==> Y(Y-1+Y+1) = X(X+1)
==> Y(2Y) = X(X+1)
==> 2Y^2 = X(X+1)
==> 2Y^2 - X(X+1) = 0
So, we are simply looping from 1->INT_MAX so we have all the Ys. Just find if there is such an X that solves the equation. I coincidentally hit the theory that FLOORING of SQRT(2Y^2)is the only possible number.
#include <cstdio>
#include <iostream>
#include <cmath>
#include <climits>
using namespace std;
int output[20][2]={0,0};
int main()
{
freopen("out.txt","w+",stdout);
double rupper, rlower;
long long i, count, upper, lower;
for (i=1, count=0 ; i<=INT_MAX && count<=10 ; i++)
{
upper = 2 * i * i;
lower = sqrt(upper);
if ((upper - (lower*lower) - lower)==0)
{
cout << "{" << i << "," << lower << "}," << endl;
count++;
}
}
return 0;
}
The output is generated in a file, named out.txt. Just make a program and initialize the array with the output. And print it.
No comments:
Post a Comment
Post your comment here. If you want to say something about programming problems, scripts, software etc, please try to be as descriptive as possible.