Zdefiniuj, że liczba naturalna p jest liczbą pierwszą +1 liczby naturalnej n, jeżeli p jest liczbą pierwszą, a standardową reprezentację binarną (tj. Bez zer wiodących) p można uzyskać poprzez dodanie (tj. Dodawanie, dodawanie lub wstawianie) pojedynczy 1 do standardowej reprezentacji binarnej n .
Na przykład binarna reprezentacja 17 to 10001 2 . Odrębne liczby naturalne, które można utworzyć, dodając 1 do 10001 2, to 110001 2 lub 49 , 101001 2 lub 41 , 100101 2 lub 37 oraz 100011 2 lub 35 .
Wśród nich 41 i 37 to liczby pierwsze, więc 17 ma dwie liczby pierwsze +1 .
Zadanie
Napisać program lub funkcję, która przyjmuje ściśle dodatnią liczbę całkowitą N wejściu i nadrukami lub zwraca liczby odmiennych +1 bodźce o n .
Dane wejściowe i wyjściowe muszą być albo liczbą całkowitą, albo jej dziesiętną lub jedną reprezentacją ciągu.
Obowiązują standardowe zasady gry w golfa .
Przypadki testowe
Input: 4
Output: 0
Input: 1
Output: 1
Input: 17
Output: 2
Input: 33
Output: 3
Input: 553
Output: 4
Input: 3273
Output: 5
Input: 4145
Output: 6
Input: 4109
Output: 7
Input: 196869
Output: 8
Odpowiedzi:
Pyth, 20 bajtów
Pakiet testowy
źródło
JavaScript ES6, 141 bajtów
143147160Oszczędza 13 bajtów dzięki @Naouak
Metoda podobna do mojej odpowiedzi TeaScript, używa RegExp (dobrze mnie słyszałeś) do sprawdzania liczb pierwszych.
Nie golfił
źródło
(p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0)('0b'+l,2)
liczby pierwszej w ten sposób: zamiast!Array(+('0b'+l)+1).join(1).match(/^1?$|^(11+?)\1+$/)
Minkolang 0.11 ,
5452 bajtyWyjaśnienie
źródło
TeaScript , 22 bajty
TeaScript zaczyna wyglądać jak APL ... Znaki specjalne są konwertowane na dłuższe, często powtarzane sekwencje
Tłumacz online powinien zaznaczyć „Dane wejściowe to liczby”.
Wyjaśnienie i nieugolfowany
źródło
Julia,
5552 bajtówk=2.^(0:endof(bin(n)))
generuje tablicę zawierającą moce 2 od 1 do najwyższej mocy mniejszej niżn
.2n+k-n%k
następnie używa operacji tablicowych, aby określić wszystkie możliwe „liczby +1”.∪
(odpowiednikunion
, który robi to samo, counique
w tej sytuacji) usuwa powtarzane wartości. Następniesum(isprime,)
liczy liczbę liczb pierwszych na liście.źródło
CJam, 26 bajtów
Nie jest zwycięzcą, ale pokonuje istniejące odpowiedzi CJam dość solidnie i po raz pierwszy mogę użyć polecenia 0.6.5
e\
.Sprawdź to tutaj.
Wyjaśnienie
Warto zwrócić uwagę na to, że zamieniamy bity przed
0
i1
przed zrobieniem pierwszej kopii, więc tracimy oryginalną tablicę z1
dodanym do przodu. Jednak dane wejściowe są zawsze dodatnie, więc cyfra wiodąca zawsze będzie jedna. Oznacza to, że po przygotowaniu kolejnego lista cyfr zawsze zaczyna się od,[1 1 ...]
więc pierwsza zamiana w żadnym wypadku nie będzie działać.źródło
Mathematica, 87 bajtów
źródło
Julia,
11010810487 bajtówSpowoduje to utworzenie nienazwanej funkcji, która przyjmuje wartość całkowitą i zwraca liczbę całkowitą. Aby to nazwać, nadaj mu nazwę, np
f=n->...
.Nie golfowany:
Oszczędność 17 bajtów dzięki Glen O!
źródło
bin
musi zaczynać się od 1, więc nie musisz osobno obsługiwać"1"b
. A kiedyi=length(b)
będziesz miałb[i+1:end]
odpowiednik""
, więc nie trzeba tego wpisu (wystarczy, żeb=bin(n)
w pewnym momencie zajmie się tym). Isum
zrobi to samo, cocount
dla dwóch mniej bajtów.b
metę, równie dobrze możesz zdobyć go z odrobiną sztuczki -b=bin(n)[s=1:end]
a następniefor i=s
dla zrozumienia.bin
powinien mieć wartość 1, a otrzymasz:n->sum(i->isprime(parse(Int,i,2)),(b=bin(n);unique([b[[1:i;1;i+1:end]]for i=1:endof(b)])))
- Spowoduje to zmniejszenie liczby do 90 bajtów.unique
zunion
- będzie to zrobić to samo, jeśli podano tylko jedną tablicę jako wejścia. Lub jeszcze lepiej,∪
zamiastunion
.CJam, 58 bajtów
Zajęło mi to dzień i to była moja czwarta iteracja.
źródło
Japt
-x
,1411 bajtówWypróbuj lub uruchom wszystkie przypadki testowe
źródło
PHP, 145 bajtów
Dodałem nowy wiersz dla czytelności:
źródło
CJam, 34 bajty
Wypróbuj online
Pierwsza wersja zostanie zaktualizowana, jeśli wymyślę coś lepszego.
źródło
APL, 55
2 bajty krótsza wersja specyficzna dla Dyalog:
źródło
Matlab (120)
źródło
Brachylog , 17 bajtów
Wypróbuj online!
Wejście przez zmienną wejściową i wyjście przez zmienną wyjściową.
źródło
Galaretka , 13 bajtów
Wypróbuj online!
źródło
Python 2 , 103 bajty
Wypróbuj online!
źródło