Напишите программу на выбранном вами языке, которая, по- видимому, успешно находит контрпример к последней теореме Ферма . То есть найдите целые числа a , b , c > 0 и n > 2, такие что a n + b n = c n .
Конечно, вы не можете действительно сделать это, если нет ошибки в доказательстве Эндрю Уайлс. Я имею в виду подделать это , полагаясь на
- целочисленное переполнение
- ошибка округления с плавающей точкой
- неопределенное поведение
- типы данных с необычными определениями сложения, возведения в степень или равенства
- ошибки компилятора / интерпретатора
- Или что-то вдоль этих линий.
Вы можете жестко закодировать некоторые или все переменные a
, b
, c
, или n
, или искать их, делая петлю , как for a = 1 to MAX
.
Это не кодовый гольф; это конкурс, чтобы найти умные и тонкие решения.
Ответы:
J
На самом деле, Ферма совершил грубую ошибку: на самом деле это неправильно для любых b, c или n, если a равно 1:
источник
1^(9 + (3^(9 = (42^9))))
1^i.5
оценивает до1 1 1 1 1
.TI-Basic
Вывод (правда)
источник
1782^12+1841^12=1922^12
.Ява
Этот парень Ферма, должно быть, спал. Я получаю сотни решений уравнений. Я просто преобразовал свою формулу Excel в программу Java.
источник
^
в Java есть xor, а не сила.C ++
Составлено
clang++ -O3 -o fermat fermat.cpp
, протестировано сUbuntu clang version 3.4.1-1~exp1 (branches/release_34) (based on LLVM 3.4.1)
:Очевидно, мы нашли a, b, c> 0, так что a 3 + b 3 = c 3 (это также работает при n = 4, 5, 6, ...).
источник
++
вclang++
.val.u
может переполниться (было бы иначе, если быuint32_t
вместо этого было). Кроме того, этот код также используетсяunion
неверным образом (согласно стандарту вы не можете писать в одно поле и читать другое поле), но это допускается многими компиляторами (согласно их документации).a,b,c
(или что-то в этом роде)fermat()
заставляет функцию никогда не возвращаться.Ява
Похоже, теорема верна для n = 3, но я нашел контрпримеры для n = 4:
Выход:
Объяснение:
источник
питон
источник
True
потому что math.pow возвращает числа с плавающей запятой, и им не хватает точности, чтобы получить правильный ответFalse
.GolfScript
Этот подход находит кучу разных решений. Например:
Как это устроено
источник
С
Ну, конечно, вы все находите контрпримеры, вы продолжаете получать целочисленные переполнения. Кроме того, вы слишком медлительны, перебирая и c. Это гораздо лучший способ сделать это!
источник
С
Мы все ненавидим целочисленные переполнения, поэтому мы будем использовать маленький показатель степени
n
и некоторые преобразования с плавающей запятой. Но все же теорема не будет иметь место дляa = b = c = 2139095040
.Выход:
Disproved for 2139095040, 2139095040, 2139095040, 42: yes
Disproved for 2139095040, 2139095040, 2139095040, 90: yes
источник
Javascript
Знаете, 42 - это магия.
А также Уайлс не один.
источник
T-SQL
Чтобы опровергнуть теорему этого парня Ферма, нам просто нужно найти контрпример. Кажется, он был очень ленив, и попробовал это только для действительно маленькой перестановки. На самом деле, он даже не пытался. Я нашел встречный пример всего за 0 <a, b, c <15 и 2 <e <15. Извините, я в глубине души гольфист, поэтому позже я раскрою этот код!
Возвращает 1, что означает, что мы нашли контрпример!
источник
JavaScript
Похоже, этот парень был на что-то хорошо. На наркотики, если вы спросите меня. Учитывая ограничения, не может быть найдено множество значений, для которых теорема верна.
источник
n
) должен быть>= 3
.Еще один базовый контрпример
источник