Числа Ферма являются положительными целыми числами, которые могут быть выражены как 2 2 x +1 с целым числом x.
Давайте теперь определим атрибут числа, называемого «Fermat-ness»:
- Ферматность числа на единицу меньше, чем длина цепочки степеней двух, начиная с основания, с степенями двух, развернутыми таким образом, чтобы максимизировать фермацию.
- Число, не являющееся числом Ферма, имеет нулевое значение Ферма.
Итак, 17 (= 2 2 2 2 0 +1) имеет Ферматнесс три.
Вызов
Если в качестве входных данных положительное ненулевое целое число, выведите Fermatness числа.
правила
- Вы можете использовать входные данные в двоичном, десятичном, шестнадцатеричном виде, в виде bignum или любого другого формата, который позволит вам играть в гольф наилучшим образом.
- Ваше решение должно быть в состоянии обрабатывать числа с длинами битов более 64 независимо от того, какое представление вы используете.
- Только неотрицательные целые числа.
- Стандартные лазейки , конечно, запрещены.
- Это код-гольф , поэтому выигрывает самый короткий ответ.
Контрольные примеры
Это в формате input->output
. Ввод в шестнадцатеричном формате для экономии места.
10000000000000000000000000000000000000000000000000000000000000001 -> 2
1000000000000BC00000000000000000000000000000000001000000000000001 ->0
1234567890ABCDEF -> 0
100000000000000000000000000000001 -> 1
5 -> 2
11 -> 3
10001 -> 4
101 -> 1
То же в десятичном виде:
115792089237316195423570985008687907853269984665640564039457584007913129639937 -> 2
115792089237316497527923305698859709742143344804209838213621568094470773145601 -> 0
1311768467294899695 -> 0
340282366920938463463374607431768211457 -> 1
5 ->2
17 -> 3
65537 -> 4
257 -> 1
Спасибо геокавелю за неоценимый вклад в песочницу.
Ответы:
Желе ,
1514 байт1 байт благодаря Джонатану Аллану.
Попробуйте онлайн!
источник
BḊCL⁸Ạ?
->BḊ⁸LṀ?
Python 2 ,
10381 байтПопробуйте онлайн!
Я понял, что глупость поможет снизить количество моих байтов, поэтому я сделал это. Также возведение в степень в отличие от логарифмов.
источник
RProgN 2 , 75 байтов
Попробуйте онлайн!
Это только 70 байтов, если вы не добавите,
«»'¤=
который назначает вычисление Fermatness к¤
персонажу. Если вы сделаете это, вам нужно будет поместить число в разделе заголовка TIO, а не в нижнем колонтитуле, как это сейчас.Это эффективно использует ту же логику, что и мой ответ на Python, поэтому, если вам не важно, как работает RProgN 2, просто посмотрите на него, чтобы объяснить, что происходит. В противном случае
Разбивка кода:
К сожалению, функция log
Š
и обычная функция возведения в степень не^
имеют точности, чтобы сделать это изначально, поэтому мне пришлось переопределить, как возведение в степень работало, поскольку умножение несет в себе гораздо большую точность. Без этого переопределения этот ответ будет на 23 байта короче.источник
Perl 6 , 62 байта
Попробуйте онлайн!
источник