#include<iostream>
#include<cstdio>
#define db(a) cout << #a << " = " << a << endl;
#define db2(a, b) cout << #a << " = " << a << " " << #b << " = " << b << endl;
using namespace std;
int cubo(int a) {
return a * a * a;
}
int main() {
int n, x, y;
while(scanf("%d", &n)) {
if(n == 0) break;
x = y = 0;
while(1) {
if(n == cubo(x) - cubo(y)){
printf("%d %d\n", x, y);
break;
}
if(n < cubo(x) - cubo(y)) y++;
if(n > cubo(x) - cubo(y)) x++;
if(cubo(x) - cubo(y) == 0 || x >= 60 || y>= 59) {
printf("No solution\n");
break;
}
}
}
return 0;
}
I just simply iterate looking for a pair x, y that satisfy n = x^3 - y^3 and I do it until
x >= 60 || y>= 59 because the diference between them is greater than 10,000 this means that
there is no solution.
for example if n = 1 then:
1 = 1^3 - 0^3 then printf "1 0"
2 = 0^3 - 0^3 doesn't match ... so I keep it up looking for the next candidate
2 = 1^3 - 0^3 equal to 1 so also, doesn't match again and as this is less than n = 2 x must be greater so increase it again ...
2 = 2^3 - 0^3 this is 8 , we have exceeded so we need to modify y now. so we increse it.
2 = 2^3 - 1^3 this is 7 , this goes being the same (or be it greater) so y++ again
2 = 2^3 - 2^3 this becomes less than 2 again so it means that there is no solution
The same logic applies for the rest of numbers.
I hope your comments.
No hay comentarios:
Publicar un comentario