Если задано неотрицательное целое число выведите число Эйлера ( OEIS A122045 ).
Все нечетные числа Эйлера равныЧетные числа Эйлера могут быть вычислены по следующей формуле ( относится к мнимой единице):
правила
- n th будет неотрицательным целым числом, так что число Эйлера находится в пределах представимого диапазона целых чисел для вашего языка.
Тестовые случаи
0 -> 1
1 -> 0
2 -> -1
3 -> 0
6 -> -61
10 -> -50521
20 -> 370371188237525
-i/2
, которые выдают-i
при добавлении. Умножьте это наi
сумму суммирования, и вы получите1
.Ответы:
Mathematica, 6 байтов
-кашель-
источник
GoatImageQ
недооцененJ , 10 байт
Попробуйте онлайн!
Используется определение для экспоненциальной производящей функции sech (x).
источник
t.
илиt:
где gf и egf Любопытно, что tan (x) не поддерживается, а sin (x) / cos (x).Пари / ГП , 32 байта
Попробуйте онлайн!
источник
Клен, 5 байт
Ура для встроенных?
источник
Максима , 5 байтов / 42 байта
Максима имеет встроенный:
Попробуйте онлайн!
Следующее решение не требует встроенного сверху и использует формулу, которая первоначально определила числа Эйлера.
В основном мы ищем n-й коэффициент расширения серии
1/cosh(t) = sech(t)
(доn!
)Попробуйте онлайн!
источник
Mathematica, без встроенного, 18 байт
Используя формулу @ rahnema1 :
21 байт:
источник
Python 2.7, 46 байт
С помощью Сципи.
источник
Perl 6 , 78 байт
Использует итерационную формулу отсюда :
Как это работает
Общая структура - это лямбда, в которой генерируется бесконечная последовательность, выражением, которое вызывается повторно и получает все предыдущие значения последовательности в переменной
@E
, а затем эта последовательность индексируется с помощью аргумента лямбда:Выражение, вызываемое для каждого шага последовательности:
источник
Максима, 29 байт
Попробуйте онлайн!
Дважды мнимая часть функции полилогарифма порядка
-n
с аргументомi
[1]источник
JavaScript (Node.js) ,
4645 байтПопробуйте онлайн!
Действителен для всех значений (как требуется), но не для целом (выводит для нечетных s.) Код модифицируется для уменьшения одного байта путем изменения вывода на где определено, как показано ниже. В частности, формула повторения для имеет видEn 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 байтПопробуйте онлайн!
Удивлен, пока не нашел ответ на JavaScript, так что я попробую.
Код состоит только из базовой математики, но математика, стоящая за кодом, требует исчисления. Формула рекурсии получается из разложения производных от разных порядков.sech(x)
объяснение
Здесь я буду использовать некоторые удобные обозначения. Пусть и . Тогда у нас естьTn:=tanhn(t) Sn:=sechn(t)
Поскольку и , мы можем сделать вывод, чтоdTdt=S2 dSdt=−TS
Пусть и , мы можем переписать вышеприведенное соотношение какb=i+1 a=n−i
То есть вносит вклад как в и в . В результате мы можем написать в терминах и :F(n,i) F(n+1,i+2) F(n+1,i) F(n,i) F(n−1,i−2) F(n−1,i)
с начальным условием и где .F(0,0)=1 F(0,i)=0 i≠0
Связанная часть кода
a?-F(--a,b)*++b+F(a,b-=3)*(a-b):+!b
точно рассчитывается с использованием приведенной выше формулы повторения. Вот разбивка:Поскольку и , равен коэффициенту в разложении , то есть .T(0)=0 S(0)=1 En Sn+1 dnSdtn F(n,n)
Для ветвей, которые никогда не могут быть достигнуты, повторения всегда заканчиваются на 0, поэтому где или нечетно. Последнее, в частности, подразумевает, что для всех нечетных s. Даже если строго больше , повторение может в конечном итоге позволить произойти в некоторой точке, но перед этим шагом оно должно достичь точки, где , а формула повторения показывает, что значение должно быть 0 в этой точке (поскольку первое слагаемое умножается на , а второе слагаемое находится дальше от "треугольника"F(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 ). В результате где . Это завершает доказательство правильности алгоритма.F(n,i)=0 i>n
расширения
Код может быть изменен для вычисления еще трех связанных последовательностей:
Касательные числа (46 байтов)
Secant Numbers (45 байтов)
Зигзагообразные числа Эйлера (48 байт)
источник
Befunge, 115 байт
Это только поддерживает жестко заданный набор первых 16 чисел Эйлера (то есть E 0 - E 15 ). Все, что за этим, в любом случае не вписывается в 32-битное значение Befunge.
Попробуйте онлайн!
Я также полностью реализовал формулу, представленную в задаче, но она почти в два раза больше и по-прежнему ограничена первыми 16 значениями в TIO, хотя это 64-разрядный интерпретатор.
Попробуйте онлайн!
Проблема с этим алгоритмом состоит в том, что промежуточные значения в ряду переполняются намного раньше, чем общее. На 32-битном интерпретаторе он может обрабатывать только первые 10 значений (т. Е. От E 0 до E 9 ). Тем не менее, переводчики, использующие bignums, должны работать намного лучше - PyFunge и Befungee могут справиться как минимум с E 30 .
источник
Python2, (разумно рационально), 153 байта
Это очень неоптимально, но он пытается использовать базовые функции sympy и избегать чисел с плавающей запятой. Спасибо @Mego за то, что я прямо указал на оригинальную формулу, указанную выше. Я пытался использовать что-то вроде @ xnor's "объединить две петли" из Tips для игры в гольф на Python
источник
import*
(удалить пробел между), чтобы сохранить байт. Кроме того, вам нужно каким-то образом принимать число в качестве входных данных (фрагменты, которые предполагают, что вход находится в переменной, не допускаются).CJam (34 байта)
Демонстрация онлайн, которая печатает E (0) к E (19). Это анонимный блок (функция).
Реализация заимствует повторение Shieru Akasoto и переписывает его в более дружественном для CJam стиле, манипулируя целыми строками за раз.
рассечение
источник
Wolfram Language (Mathematica) ,
4746 байтовБез использования каких-либо специальных функций:
Попробуйте онлайн!
источник
Аксиома, 5 байт
для OEIS A122045; это 57 байт
код теста и результаты
источник
APL (NARS), 42 символа, 84 байта
Следуйте формуле, показанной в «smls», тестируйте:
последний случай возвращает одно большое рациональное значение в качестве результата, потому что я ввожу 20x (большое рациональное значение 20/1), а не 20, как мне кажется, 20.0 с плавающей запятой 64-разрядной
Было бы быстрее, если бы один вернул 0 в ближайшее время, но был бы немного длиннее (50 символов):
было бы быстрее, если бы использовалось определение по вопросу (и было бы немного длиннее 75 символов):
Результат выше это одно комплексное число, которое имеет только действительную часть.
источник