141


Кое-кто не поверил, что (-80538738812075974)^3 + 80435758145817515^3 + 12602123297335631^3 = 42.
С помощью 64-битных аппаратных целочисленных вычислений это не получится. Если использовать вычисления с плавающей точкой, то будет огромная погрешность, так-как нужна мантиса не менее 50 знаков, а long double позволяет около 16.
Выручит длинная арифметика. Я использовал GMP.
Вот сама программа:
#include <gmpxx.h>
int main()
{
mpz_class x = -80538738812075974;
mpz_class y = 80435758145817515;
mpz_class z = 12602123297335631;
gmp_printf ("X = %Zd\n", x);
gmp_printf ("Y = %Zd\n", y);
gmp_printf ("Z = %Zd\n", z);
mpz_class x3 = x * x * x;
mpz_class y3 = y * y * y;
mpz_class z3 = z * z * z;
gmp_printf ("X^3 = %Zd\n", x3);
gmp_printf ("Y^3 = %Zd\n", y3);
gmp_printf ("Z^3 = %Zd\n", z3);
mpz_class x3y3z3 = x3 + y3 + z3;
gmp_printf ("X^3 + Y^3 + Z^3 = %Zd\n", x3y3z3);
return 0;
}
Собираем:
# g++ 42.c -lgmpxx -lgmp
Запускаем:
# ./a.out
X = -80538738812075974
Y = 80435758145817515
Z = 12602123297335631
X^3 = -522413599036979150280966144853653247149764362110424
Y^3 = 520412211582497361738652718463552780369306583065875
Z^3 = 2001387454481788542313426390100466780457779044591
X^3 + Y^3 + Z^3 = 42
Ответ: 42.