Прочитав на Храбре статью «Неопределённое поведение и теорема Ферма», я тоже твердо решил получить свои 100 000 DM по завещанию математика Вольфскеля.

Задача в общем-то проста:

Для любого натурального числа уравнение a^n = b^n + c^n, где n>2 не имеет решений в целых ненулевых числах a, b, c.

Честно скопировав алгоритм из вышеприведенного поста:

while ($suc){

$rez1=($a**$step) - (($b**$step)+($c**$step));

if ((($a**$step) == (($b**$step)+($c**$step)))) {$suc=0}

$a++;

if ($a>$MAX) {
      $a=1;
      $b++;
}

if ($b>$MAX) {
      $b=1;
      $c++;
}

if ($c>$MAX) {
      $c=1;
	  ;}

$count++;}


(a, b, c – соответствующие теореме переменные. step – степень, в которую возведены переменные. rez – результат вычисления формулы «a^n – (b^n + c^n)». count – счетчик кол-ва попыток), я запустил скрипт с параметром степени равным 2. Ответ не заставил себя долго ждать: 25 = 16 + 9. Ну это-то понятно.

Далее добавил в код дополнительное условие — увеличение параметра step (степень) при достижении переменной c значения больше $MAX (принятым за 1000 для каждой переменной теоремы).

if ($c>$MAX) {
$c=1;
$step++;}


И, о чудо, сев утром за компьютер, увидел такую картинку:

image

Т.е. 512^6 = 512^6 + 1^6.

Perl встал в очередь за C++ за Нобилевской премией и вожделенными 100 000 DM.

В Perl есть инструкции для произведения инженерных расчетов правильного округления и т.д., но к сожалению, теорема тогда не решается.