Задача на этот раз состоит в том, чтобы найти n- й фибогексаприм . Определение фибогексаприма следующее:
Сначала мы наблюдаем список с числами Фибоначчи:
N | Fibonacci number
1 | 1
2 | 1
3 | 2
4 | 3
5 | 5
6 | 8
7 | 13
8 | 21
9 | 34
10 | 55
11 | 89
12 | 144
13 | 233
14 | 377
15 | 610
16 | 987
17 | 1597
После этого мы конвертируем числа в шестнадцатеричные:
N | Fib | Hex
1 | 1 | 1
2 | 1 | 1
3 | 2 | 2
4 | 3 | 3
5 | 5 | 5
6 | 8 | 8
7 | 13 | D
8 | 21 | 15
9 | 34 | 22
10 | 55 | 37
11 | 89 | 59
12 | 144 | 90
13 | 233 | E9
14 | 377 | 179
15 | 610 | 262
16 | 987 | 3DB
17 | 1597 | 63D
Из шестнадцатеричных чисел мы отфильтровываем буквы. Все, что нам осталось, это числа. Нам нужно проверить, просты ли эти числа:
hex | filtered | is prime? | N =
1 > 1 > false
1 > 1 > false
2 > 2 > true 1
3 > 3 > true 2
5 > 5 > true 3
8 > 8 > false
D > 0 > false
15 > 15 > false
22 > 22 > false
37 > 37 > true 4
59 > 59 > true 5
90 > 90 > false
E9 > 9 > false
179 > 179 > true 6
262 > 262 > false
3DB > 3 > true 7
63D > 63 > false
Если отфильтрованное число является простым, мы называем это Fibohexaprime . Вы можете видеть, что для N = 7
связанного числа Фибоначчи 987.
Задача проста: когда вводится с использованием STDIN или приемлемой альтернативы, напишите программу или функцию, которая выводит n-й фибогексаприм с использованием STDOUT или приемлемой альтернативы.
Контрольные примеры
Input - Output
1 - 2
2 - 3
3 - 5
4 - 55
5 - 89
6 - 377
7 - 987
8 - 28657
9 - 75025
10 - 121393
11 - 317811
12 - 5702887
13 - 9227465
14 - 39088169
15 - 102334155
16 - 32951280099
17 - 4052739537881
18 - 806515533049393
19 - 7540113804746346429
Правила:
- Учитывая целое число между
1
и19
(приведенные выше значения20
превышают максимальное значение для 64-разрядного целого числа со знаком), выведите соответствующее значение. - Вы можете написать функцию или программу.
- Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
Ответы:
Pyth, 27 байт
демонстрация
y
вычисляет n-е число Фибоначчи..f
Цикл находит fibohexaprime в соответствии с входным.источник
MATL , 28 байт
При этом используется версия 1.0.0 MATL , которая была опубликована в Esolangs 12 декабря, ранее, чем эта проблема.
пример
объяснение
Код похож на тот, что был в ответе Мартина Бюттнера .
источник
CJam, 28 байтов
Проверьте это здесь.
объяснение
источник
Perl 6 , 62 байта
Мой первый проход просто заставить его работать:
Сочетая
grep
иmap
, я могу удалить 10 байтовЕсли я использую
grep
вместоmap
, я сохраню еще 5 байтов:использование:
источник
Mathematica 111 байтов
Там еще может быть место для дополнительного игры в гольф.
источник
Юлия, 123 байта
Это анонимная функция, которая принимает целое число и возвращает целое число. Чтобы назвать его, дайте ему имя, например
f=n->...
.Ungolfed:
источник
GAP , 204 байта
Этот ответ довольно ничем не примечателен, за исключением того, что GAP достаточно крут, чтобы иметь возможность находить следующую пару фибогексапримов (и, что еще круче, он находит их за миллисекунды с заданным кодом).
Обратите внимание, что f (24) находится между 2 ^ 216 и 2 ^ 217.
Вот код:
Там, вероятно, еще можно поиграть в гольф. Я думаю, что реализация довольно проста.
Ungolfed:
источник
C
186183 байтаТест на простоту очень неэффективен, поэтому вычисления будут немного бороться
n > 16
и долго мучатьсяn = 19
. Тем не менее это работает и дает ожидаемые результаты.Код предполагает, что
size_t
это 64-битный тип, что справедливо как для 64-битных Linux, так и для Windows.Бонус: к сожалению, мы обязаны использовать 64-битные типы, что приводит к дополнительным издержкам в 33 байта. Следующая версия работает для
n <= 15
использованияint
и имеет длину 150 байт:Основной тест:
источник
size_t
и удаляя включение? Это зависит от реализации, но кажется 64-битным как в 64-битном Linux, так и в Windows gcc (и с каких пор мы заботились о переносимости в codegolf?). (примечание:%ld
не 64-битный в 64-битной Windows; требуется%lld
)size_t
не является встроенным, он определен вstddef.h
(который, в свою очередь, прямо или косвенно включен практически любым другим заголовком). Так или иначе, мне нужно#include
. Я все еще могу сохранить 2 байта, используяsize_t
вместо этогоuint64_t
:)lld
бит, у меня не было возможности протестировать его на Windows (но переносимость не имеет значения, верно?)stdio.h
когда я тестировал. В любом случае - вы все равно можете сохранить пару, включивmath.h
вместоstddef.h
.math.h
не справляется со мной (GCC 4.9 с GNU libc)Python 2, 127 байт
Алгоритм может быть намного более эффективным. В частности, проверка на первичность
(t>1)*all(t%x for x in range(2,t))
проверяет потенциальные факторы вплоть до тогоt-1
момента, когда на самом деле нужно будет только проверить до уровня квадратного корня . Посколькуrange
в Python 2 хранится весь список в памяти, это приводит к значениюMemoryError
atN=17
(на моей машине используются настройки по умолчанию).источник
Рубин, 160 байт
Ungolfed:
Использование:
источник
R 164 байта
С отступом, с новыми строками:
Примеры:
источник