Możemy zdefiniować pasmo podzielności k
liczby n
, znajdując najmniejszą nieujemną liczbę całkowitą k
taką, przez którą n+k
nie można podzielić k+1
.
Wyzwanie
W wybranym języku napisz program lub funkcję, która generuje lub zwraca pasmo podzielności wprowadzonych danych.
Przykłady:
n=13:
13 is divisible by 1
14 is divisible by 2
15 is divisible by 3
16 is divisible by 4
17 is not divisible by 5
Odmiana Divisibilty 13
jest4
n=120:
120 is divisible by 1
121 is not divisible by 2
Odmiana Divisibilty 120
jest1
Przypadki testowe:
n DS
2 1
3 2
4 1
5 2
6 1
7 3
8 1
9 2
10 1
2521 10
Więcej przypadków testowych można znaleźć tutaj .
Notatki
- Na podstawie projektu Euler Problem 601
- Sekwencję tę można znaleźć w OEIS , zmniejszoną o 1.
Zasady
- Możesz założyć, że wartość wejściowa jest większa niż 1.
Punktacja
code-golf : Zgłoszenie z najniższą liczbą punktów wygrywa.
k + 1
2, gdziek
jest najmniejszą dodatnią liczbą całkowitą. Przepraszam za nitpick.k
który się nie dzielin-1
?n=7
gdziek=3
:n-1
jest podzielny przezk
.+1
.Odpowiedzi:
Pyth ,
65 bajtówWypróbuj online!
źródło
Java 8,
44424139 bajtówPrzekreślone 44 jest nadal regularne 44; (
-2 bajty dzięki @LeakyNun .
-1 bajt dzięki @TheLethalCoder .
-2 bajty dzięki @Nevay .
Wyjaśnienie:
Wypróbuj tutaj.
źródło
Haskell , 35 bajtów
Wypróbuj online!
Wykorzystanie
until
zajmuje również 35 bajtówźródło
Łuska , 7 bajtów
Wypróbuj online!
źródło
05AB1E ,
76 bajtówWypróbuj online!
Alternatywne rozwiązania 7-bajtowe:
<DLÖγнg
Ls<ÑKн<
źródło
JavaScript (ES6), 28 bajtów
Sprawdź to
źródło
Mathematica,
3027 bajtówFunkcja bez nazwy, która przyjmuje argument liczby całkowitej.
Wypróbuj na Wolfram Sandbox
Stosowanie:
źródło
Perl 5 ,
2321 + 1 (-p) = 22 bajtówWypróbuj online!
źródło
Python 2 , 35 bajtów
Wypróbuj online!
źródło
Cubix , 17 bajtów
Wypróbuj online!
Cubified
I1
ustaw stos za pomocą wejścia i dzielnika%?
zrób mod i przetestuj;)qU)uqU
jeśli 0 usuń wynik i przyrost danych wejściowych i dzielnik. Trochę okrągła ścieżka, do której można wrócić%
/;(O@
jeśli nie 0, upuść wynik, dzielnik dekrementacji, wyjdź i wyjdźZobacz, jak biegnie
źródło
Python 2 ,
4341 bajtówZaoszczędź 2 bajty dzięki Dziurawej Zakonnicy !
Wypróbuj online!
Python 2 , 40 bajtów
Wypróbuj online!
źródło
Python 2 ,
4440 bajtów-4 bajty dzięki Dziurawej Zakonnicy.
Wypróbuj online!
źródło
Szybki 4 , 56 bajtów
Jest to pełna funkcja
f
z parametrem liczby całkowitej,i
który wypisuje dane wyjściowe.Wypróbuj tutaj.
Szybki 4 , 56 bajtów
Jest to anonimowa funkcja, która zwraca wynik.
Wypróbuj tutaj.
Sprawdź pakiet testowy!
źródło
C # (mono) ,
4139 bajtówZasadniczo port odpowiedzi Java 8 @Kevina Cruijssena z dalszą grą w golfa.
Wypróbuj online!
źródło
dc , 28 bajtów
Wypróbuj online!
Wydaje mi się to naprawdę nieoptymalne, z przyrostem i ostatecznym zmniejszeniem, ale tak naprawdę nie widzę sposobu, aby to poprawić. Zasadniczo po prostu zwiększamy licznik
i
i naszą wartość początkową, o ile mod wartościi
nadal wynosi zero, a gdy to nieprawda, odejmujemy jedeni
i drukujemy.źródło
Gaia , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
J, 17 bajtów
Wypróbuj online!
Myślę, że wciąż jest tu miejsce na grę w golfa.
Wyjaśnienie (bez golfa)
Cap (
[:
) ma za zadanie upewnić się, że J nie traktuje ostatniego czasownika ({.@I.
) jako części haka.Jedyną dziwną rzeczą w tej odpowiedzi jest to, że
I.
faktycznie powiela indeks każdej niezerowej liczby tyle razy, ile wynosi wartość tej liczby. na przykładAle to nie ma znaczenia, ponieważ i tak chcemy pierwszego indeksu (a ponieważ
i.
daje zakres rosnący, wiemy, że pierwszy indeks będzie najmniejszą wartością).Na koniec, oto bardzo krótki dowód na to, że sprawdzanie podziału można sprawdzić tylko do
n
.Zaczynamy sprawdzać podzielność za pomocą
1 | n
, więc zakładając, że pasmo posuwa się tak daleko, jak tylko przejdziemy do sprawdzania podzielności przezn
nas,n | 2n - 1
co nigdy nie będzie prawdziwe (2n - 1 ≡ n - 1 (mod n)
). Dlatego pasmo na tym się skończy.źródło
Japt , 7 bajtów
Przetestuj online!
źródło
Kod maszynowy x86, 16 bajtów
Powyższa funkcja przyjmuje
n
wECX
rejestrze pojedynczy parametr . Oblicza pasmo podzielnościk
i zwraca to za pośrednictwemEAX
rejestru. Jest zgodny z 32-bitową konwencją szybkich wywołań , dzięki czemu można go łatwo wywołać z kodu C przy użyciu kompilatorów Microsoft lub Gnu.Logika jest dość prosta: wykonuje tylko iteracyjny test rozpoczynający się od 1. Jest funkcjonalnie identyczny z większością innych odpowiedzi tutaj, ale ręcznie zoptymalizowany pod kątem wielkości. Wiele miłych instrukcjami 1-bajtowych tam, w tym
INC
,DEC
,CDQ
, iXCHG
. Zaszyfrowane argumenty podziału dzielą nas trochę, ale nie strasznie.Wypróbuj online!
źródło
PHP , 34 bajty
Wypróbuj online!
Wystarczająco proste. Sprawdza pozostałą część podziału (mod) przy każdej pętli, zwiększając każdą wartość, wypisuje, gdy liczba nie jest już podzielna.
źródło
SOGL V0.12 , 8 bajtów
Wypróbuj tutaj!
Nieźle jak na język, który jest stworzony do zupełnie innego rodzaju wyzwań.
Wyjaśnienie:
źródło
Mathematica, 40 bajtów
Wypróbuj online! (Matematyka)
Podejście matematyczne, n + k jest podzielne przez k + 1 wtedy i tylko wtedy, gdy n-1 jest podzielne przez k + 1. A n-1 nie jest podzielne przez n, więc
Range@#
jest wystarczająca liczba.Pierwotnie zamierzam używać
Min@Complement[Range@#,Divisors[#-1]]-1&
, ale to też działa.źródło
Julia 0.6.0
(47 bajtów)(38 bajtów)n->(i=1;while isinteger(n/i) i+=1;n+=1 end;i-1)
n->(i=1;while n%i<1 i+=1;n+=1end;i-1)
Wypróbuj online!
9 bajtów zostało obciętych dzięki Mr.Xcoder
źródło
n->(i=1;while isinteger(n/i) i+=1;n+=1end;i-1)
n->(i=1;while n%i<1 i+=1;n+=1end;i-1)
C (gcc) , 34 bajty
Wypróbuj online!
źródło
i--
zamiastn=i-1
Partia, 70 bajtów
To wszystko polega na znalezieniu największego
i
, któryLCM(1..i)
dzielin-1
.źródło
R , 43 bajty
Funkcja anonimowa.
Sprawdź wszystkie przypadki testowe!
źródło
Aceto ,
2827 bajtówMógłbym zapisać jeden bajt, jeśli nie muszę wychodzić.
Wyjaśnienie:
Używamy trzech stosów: lewy stos zawiera licznik rozpoczynający się od 2, prawy zawiera określoną liczbę (lub jej przyrosty), stos środkowy służy do wykonywania operacji modulo. Oczywiście moglibyśmy zrobić wszystko w jednym stosie, ale w ten sposób możemy ustawić zewnętrzne stosy jako „lepkie” (wartości, które są wyświetlane, tak naprawdę nie są usuwane) i zaoszczędzić sobie wielu operacji duplikacji. Oto szczegółowa metoda:
Przeczytaj liczbę całkowitą, zwiększ ją, spraw, aby bieżący stos był lepki, i „przenieś” go (i nas samych) na stos po lewej stronie:
Idź jeszcze jeden stos w lewo, wciśnij dosłowne 2, uczyń ten stos również lepkim. Zapamiętaj tę pozycję w code (
@
) i ponownie „przenieś” wartość i siebie na środkowy stos.Teraz testujemy: czy moduł dwóch pierwszych liczb nie jest równy 0? Jeśli tak, przeskocz na koniec, w przeciwnym razie przejdź o jeden stos w prawo, zwiększaj i przesuwaj wartość i nas na środek. Następnie przejdź do lewego stosu, zwiększ go również i wskocz z powrotem do znaku, który ustaliliśmy wcześniej.
Kiedy wynik modulo nie był równy zero, odwracamy pozycję, w której porusza się IP, przesuwamy jeden stos w lewo (tam, gdzie mieszka nasz licznik), zmniejszamy go i wypisujemy wartość, a następnie wychodzimy.
źródło
Rubinowy,
343231 bajtówRekurencyjna lambda. Wciąż nowy w Ruby, więc sugestie są mile widziane!
Wypróbuj online!
źródło
F #,
86 bajtów84 bajtówWypróbuj online!
Edycja: -2 postacie z Olivera
źródło
r = if
?Befunge , 19 bajtów
Wypróbuj online!
źródło