Escriba un programa, en el idioma que elija, que parece encontrar con éxito un contraejemplo del último teorema de Fermat . Es decir, encuentre números enteros a , b , c > 0 y n > 2 de modo que a n + b n = c n .
Por supuesto, no se puede realmente hacerlo, a menos que haya una falla en la prueba Andrew Wiles. Me refiero a fingir , confiando en
- desbordamiento de enteros
- error de redondeo de punto flotante
- comportamiento indefinido
- tipos de datos con definiciones inusuales de suma, exponenciación o igualdad
- errores del compilador / intérprete
- O algo por el estilo.
Usted puede difícil que el código algunas o todas las variables a
, b
, c
, o n
, o la búsqueda de ellos haciendo bucles como for a = 1 to MAX
.
Este no es un código de golf; Es un concurso para encontrar soluciones inteligentes y sutiles.
Respuestas:
J
En realidad, Fermat cometió un gran error: en realidad está mal para cualquier b, c o n si a es 1:
fuente
1^(9 + (3^(9 = (42^9))))
1^i.5
evalúa a1 1 1 1 1
.TI-Basic
Salida (verdadero)
fuente
1782^12+1841^12=1922^12
.Java
Este chico Fermat debe haber estado durmiendo. Obtengo cientos de soluciones a las ecuaciones. Simplemente convertí mi fórmula de Excel a un programa Java.
fuente
^
en Java es xor, no poder.C ++
Compilado con
clang++ -O3 -o fermat fermat.cpp
, probado conUbuntu clang version 3.4.1-1~exp1 (branches/release_34) (based on LLVM 3.4.1)
:Obviamente encontramos a, b, c> 0 para que a 3 + b 3 = c 3 (esto también funciona para n = 4, 5, 6, ...).
fuente
++
enclang++
.val.u
puede desbordarse (sería diferente si lo fuerauint32_t
). Además, este código también se usaunion
de manera incorrecta (según el estándar, no se puede escribir en un campo y leer el otro campo), pero muchos compiladores lo permiten (de acuerdo con su documentación).a,b,c
(o cualquier otra cosa)fermat()
hace que la función nunca regrese.Java
Parece que el teorema se cumple para n = 3, pero encontré contraejemplos para n = 4:
Salida:
Explicación:
fuente
Pitón
fuente
True
porque los números de retornos Math.pow de punto flotante, y éstos no tienen la suficiente precisión para obtener la respuesta correcta,False
.GolfScript
Este enfoque encuentra un montón de soluciones diferentes. Por ejemplo:
Cómo funciona
fuente
C
Bueno, por supuesto, todos ustedes están encontrando contraejemplos, siguen obteniendo desbordamientos de enteros. Además, estás siendo muy lento al iterar en c también. ¡Esta es una forma mucho mejor de hacerlo!
fuente
C
Todos odiamos los desbordamientos de enteros, por lo que utilizaremos un pequeño exponente
n
y algunas conversiones de coma flotante. Pero aún así el teorema no sería válidoa = b = c = 2139095040
.Salida:
Disproved for 2139095040, 2139095040, 2139095040, 42: yes
Disproved for 2139095040, 2139095040, 2139095040, 90: yes
fuente
Javascript
42 es magia, ya sabes.
Y también Wiles no es uno.
fuente
T-SQL
Para refutar el teorema de este tipo de Fermat, solo necesitamos encontrar un contraejemplo. Parece que era súper perezoso, y solo lo intentó por una permutación realmente pequeña. De hecho, ni siquiera lo estaba intentando. Encontré un ejemplo de contador en solo 0 <a, b, c <15 y 2 <e <15. Lo siento, soy un jugador de golf en el fondo, ¡así que desligaré este código más tarde!
Devuelve 1, lo que significa que encontramos un contraejemplo.
fuente
JavaScript
Parece que este tipo estaba en algo bien. Sobre las drogas si me preguntas. Dadas las restricciones, no se puede encontrar un conjunto de valores para los cuales el teorema sea verdadero.
fuente
n
) tiene que ser>= 3
.Otro contraejemplo BÁSICO
fuente