Dado un número entero no negativo salida de la número de Euler ( OEIS A122045 ).
Todos los números de Euler indexados impar son Los números de Euler de índice par pueden calcularse con la siguiente fórmula ( refiere a la unidad imaginaria):
Reglas
- será un número entero no negativo de modo que el número Euler esté dentro del rango representable de números enteros para su idioma.
Casos de prueba
0 -> 1
1 -> 0
2 -> -1
3 -> 0
6 -> -61
10 -> -50521
20 -> 370371188237525
-i/2
, que producen-i
cuando se agregan. Multiplique eso por eli
exterior de la suma y obtendrá1
.Respuestas:
Mathematica, 6 bytes
-tos-
fuente
GoatImageQ
se subestimaJ , 10 bytes
Pruébalo en línea!
Utiliza la definición para la función de generación exponencial sech (x).
fuente
t.
ot:
donde están gf y egf. Una nota curiosa es que tan (x) no es compatible pero sí (x) / cos (x) sí.Pari / GP , 32 bytes
Pruébalo en línea!
fuente
Arce, 5 bytes
¿Hurra por las builtins?
fuente
Máximo , 5 bytes / 42 bytes
Maxima tiene incorporado:
Pruébalo en línea!
La siguiente solución no requiere el incorporado desde arriba, y utiliza la fórmula que definió originalmente los números de Euler.
Básicamente estamos buscando el coeficiente n-ésimo de la expansión de la serie de
1/cosh(t) = sech(t)
(hasta eln!
)Pruébalo en línea!
fuente
Mathematica, sin incorporado, 18 bytes
Usando la fórmula de @ rahnema1 :
21 bytes:
fuente
Python 2.7, 46 bytes
Usando scipy.
fuente
Perl 6 , 78 bytes
Utiliza la fórmula iterativa de aquí :
Cómo funciona
La estructura general es una lambda en la que se genera una secuencia infinita, mediante una expresión que se llama repetidamente y obtiene todos los valores anteriores de la secuencia en la variable
@E
, y luego esa secuencia se indexa con el argumento lambda:La expresión llamada para cada paso de la secuencia es:
fuente
Máxima, 29 bytes
¡Pruébelo en línea!
Dos veces parte imaginaria de la función de orden polilogaritmo
-n
con argumentoi
[1]fuente
JavaScript (Node.js) ,
4645 bytesPruébalo en línea!
Válido para todos los valores (según se requiera), pero no para generalmente (salidas para impar s.) Se modifica el código para reducir un byte cambiando la salida a donde se define como a continuación. Específicamente, la fórmula de recurrencia para esEn F(n,i) −F(n,i) n F′(n,i)=(−1)nF(n,i) F F′ F′(n,i)=(i−n−1)F′(n−1,i−2)+(i+1)F′(n−1,i)
JavaScript (Node.js) ,
7046 bytesPruébalo en línea!
Sorprendido de no encontrar una respuesta de JavaScript todavía, así que intentaré.
El código consiste solo en matemáticas básicas, pero las matemáticas detrás del código requieren cálculo. La fórmula de recursión se deriva de la expansión de las derivadas de de diferentes órdenes.sech(x)
Explicación
Aquí usaré alguna notación conveniente. Deje y . Entonces tenemosTn:=tanhn(t) Sn:=sechn(t)
Como y , podemos deducir quedTdt=S2 dSdt=−TS
Sea y , podemos reescribir la relación anterior comob=i+1 a=n−i
Es decir, contribuye tanto a como a . Como resultado, podemos escribir en términos de y :F(n,i) F(n+1,i+2) F(n+1,i) F(n,i) F(n−1,i−2) F(n−1,i)
con condición inicial y donde .F(0,0)=1 F(0,i)=0 i≠0
La parte relacionada del código
a?-F(--a,b)*++b+F(a,b-=3)*(a-b):+!b
se calcula exactamente utilizando la fórmula de recurrencia anterior. Aquí está el desglose:Como y , es igual al coeficiente de en la expansión de , que es .T(0)=0 S(0)=1 En Sn+1 dnSdtn F(n,n)
Para las ramas en las que nunca se puede alcanzar , las recurrencias siempre terminan en 0, por lo que donde o es impar. El último, particularmente, implica que para todos los impares . Para aún S estrictamente mayor que , la recurrencia puede eventualmente permitir que suceda en algún momento, pero antes de que el paso que debe alcanzar un punto donde , y la fórmula de recurrencia muestra que la el valor debe ser 0 en ese punto (ya que el primer término se multiplica por , y el segundo término está más lejos del "triángulo" deF(0,0) F(n,i)=0 i<0 i En=0 n i n 0≤i≤n i=n+1 n−i+1=n−(n+1)+1=0 0≤i≤n ) Como resultado, donde . Esto completa la prueba de la validez del algoritmo.F(n,i)=0 i>n
Extensiones
El código se puede modificar para calcular tres secuencias más relacionadas:
Números de tangente (46 bytes)
Números Secantes (45 bytes)
Números en zigzag de Euler (48 bytes)
fuente
Befunge, 115 bytes
Esto solo admite un conjunto codificado de los primeros 16 números de Euler (es decir, E 0 a E 15 ). Cualquier cosa más allá de eso no encajaría en un valor Befunge de 32 bits de todos modos.
Pruébalo en línea!
También hice una implementación completa de la fórmula provista en el desafío, pero es casi el doble del tamaño y todavía está limitada a los primeros 16 valores en TIO, a pesar de que es un intérprete de 64 bits.
Pruébalo en línea!
El problema con este algoritmo es que los valores intermedios en la serie se desbordan mucho antes que el total. En un intérprete de 32 bits, solo puede manejar los primeros 10 valores (es decir, E 0 a E 9 ). Sin embargo, los intérpretes que usan bignums deberían hacerlo mucho mejor: PyFunge y Befungee podrían manejar al menos hasta E 30 .
fuente
Python2, (sympy racional), 153 bytes
Esto es muy subóptimo pero está tratando de usar funciones básicas de sympy y evitar el punto flotante. Gracias @Mego por aclararme la fórmula original mencionada anteriormente. Traté de usar algo como "combinar dos bucles" de @ xnor de Consejos para jugar golf en Python
fuente
import*
(eliminar el espacio intermedio) para guardar un byte. Además, debe tomar el número como una entrada de alguna manera (los fragmentos que suponen que la entrada está en una variable no están permitidos).CJam (34 bytes)
Demostración en línea que imprime E (0) a E (19). Este es un bloque anónimo (función).
La implementación toma prestada la recurrencia de Shieru Akasoto y la reescribe en un estilo más amigable para CJam, manipulando filas enteras a la vez.
Disección
fuente
Wolfram Language (Mathematica) ,
4746 bytesSin usar ninguna función especial:
Pruébalo en línea!
fuente
Axioma, 5 bytes
para OEIS A122045; esto es 57 bytes
código de prueba y resultados
fuente
APL (NARS), 42 caracteres, 84 bytes
Siga la fórmula que se muestra en "smls", prueba:
el último caso devuelve un gran racional como resultado porque ingreso 20x (el gran racional 20/1) y no 20 como creo 20.0 flotante de 64 bits ...
Sería más rápido si uno devuelve 0 pronto, pero sería un poco más largo (50 caracteres):
sería más rápido si se usa la definición en cuestión (y sería un poco más de 75 caracteres):
El resultado anterior es un número complejo que solo tiene la parte real.
fuente