Fermat-Zahlen sind positive ganze Zahlen, die mit einer ganzen Zahl x als 2 2 x +1 ausgedrückt werden können .
Definieren wir nun ein Attribut einer Zahl namens "Fermat-ness":
- Die Fermat-ness der Zahl ist eins weniger als die Länge der Kette von Zweierpotenzen, ausgehend von der Basis, wobei Zweierpotenzen erweitert werden, um die Fermat-ness zu maximieren.
- Eine Zahl, die keine Fermat-Zahl ist, hat die Fermat-Ness von Null.
17 (= 2 2 2 2 0 +1) hat also Fermat-ness drei.
Herausforderung
Bei einer positiven Ganzzahl ungleich Null als Eingabe wird die Fermat-ness der Zahl ausgegeben.
Regeln
- Sie können die Eingabe in Binär, Dezimal, Hexadezimal, als Bignum oder in einem beliebigen Format verwenden, mit dem Sie am besten Golf spielen können
- Ihre Lösung muss in der Lage sein, Zahlen mit Bitlängen über 64 zu verarbeiten, je nachdem, welche Darstellung Sie verwenden.
- Nur nichtnegative ganzzahlige Potenzen.
- Standardlücken sind natürlich verboten.
- Das ist Code-Golf , also gewinnt die kürzeste Antwort.
Testfälle
Diese sind im Format input->output
. Die Eingabe erfolgt aus Platzgründen hexadezimal.
10000000000000000000000000000000000000000000000000000000000000001 -> 2
1000000000000BC00000000000000000000000000000000001000000000000001 ->0
1234567890ABCDEF -> 0
100000000000000000000000000000001 -> 1
5 -> 2
11 -> 3
10001 -> 4
101 -> 1
Das Gleiche in Dezimalzahl:
115792089237316195423570985008687907853269984665640564039457584007913129639937 -> 2
115792089237316497527923305698859709742143344804209838213621568094470773145601 -> 0
1311768467294899695 -> 0
340282366920938463463374607431768211457 -> 1
5 ->2
17 -> 3
65537 -> 4
257 -> 1
Dank Geokavel für unschätzbare Beiträge im Sandkasten.
code-golf
number-theory
HAEM
quelle
quelle
Antworten:
Jelly ,
1514 Bytes1 Byte danke an Jonathan Allan.
Probieren Sie es online!
quelle
BḊCL⁸Ạ?
->BḊ⁸LṀ?
Python 2 ,
10381 BytesProbieren Sie es online!
Ich erkannte, dass es mir helfen würde, meine Byteanzahl zu senken, wenn ich nicht dumm war, also tat ich das. Auch Potenzierung im Gegensatz zu Logarithmen.
quelle
RProgN 2 , 75 Bytes
Probieren Sie es online!
Es sind nur 70 Bytes, wenn Sie nicht die addieren, die
«»'¤=
dem¤
Zeichen die Fermatness-Berechnung zuweist . Wenn Sie dies tun, müssen Sie die Nummer in den Header-Bereich von TIO anstatt wie bisher in die Fußzeile einfügen.Dies verwendet praktisch die gleiche Logik wie meine Python-Antwort. Wenn Sie sich also nicht dafür interessieren, wie RProgN 2 funktioniert, schauen Sie sich einfach diese an, um zu erklären, was los ist. Andernfalls
Code-Aufschlüsselung:
Leider fehlt der Log-Funktion
Š
und der normalen Exponentiation^
die Genauigkeit, um dies nativ zu tun, so dass ich neu definieren musste, wie die Exponentiation funktioniert, da die Multiplikation viel präziser ist. Ohne diese Neudefinition wäre diese Antwort 23 Byte kürzer.quelle
Perl 6 , 62 Bytes
Probieren Sie es online!
quelle