Jestem 2/3 bliźniakami z moim bratem, tj. Urodziłem się tego samego dnia tego samego miesiąca, ale dwanaście lat później. Kiedy miałem 5 lat, miał 17 lat, obie liczby pierwsze; ostatnia para wieków, na którą możemy racjonalnie liczyć, to [71, 83], przy czym oboje żyjemy i jesteśmy w stanie świętować ten przypadkowy jubileusz.
Zadanie
Utwórz kod, który
przyjmuje na wejściu dwie liczby całkowite: różnicę między licznikiem a „bliźniakiem” jako dodatnią liczbą całkowitą k (no tak, jestem młodszy), a górną granicą jako dodatnią liczbą całkowitą u (uwarunkowanie czasu działania)
i daje wynik jako tablicę lub listę wszystkich liczb i mniejszych lub równych u, dla których oba i i I + K są liczbami pierwszymi. Dane wyjściowe nie muszą być sortowane.
Przypadki testowe
12, 1000 -> [5, 7, 11, 17, 19, 29, 31, 41, 47, 59, 61, 67, 71, 89, 97, 101, 127, 137, 139, 151, 167, 179, 181, 199, 211, 227, 229, 239, 251, 257, 269, 271, 281, 337, 347, 367, 389, 397, 409, 419, 421, 431, 449, 467, 479, 487, 491, 509, 557, 587, 601, 607, 619, 631, 641, 647, 661, 727, 739, 757, 761, 797, 809, 811, 827, 907, 929, 941, 971, 997]
2, 999 -> [3, 5, 11, 17, 29, 41, 59, 71, 101, 107, 137, 149, 179, 191, 197, 227, 239, 269, 281, 311, 347, 419, 431, 461, 521, 569, 599, 617, 641, 659, 809, 821, 827, 857, 881]
3, 1500 -> [2]
30, 1500 -> [7, 11, 13, 17, 23, 29, 31, 37, 41, 43, 53, 59, 67, 71, 73, 79, 83, 97, 101, 107, 109, 127, 137, 149, 151, 163, 167, 181, 193, 197, 199, 211, 227, 233, 239, 241, 251, 263, 277, 281, 283, 307, 317, 337, 349, 353, 359, 367, 379, 389, 401, 409, 419, 431, 433, 449, 457, 461, 479, 491, 541, 547, 557, 563, 569, 571, 577, 587, 601, 613, 617, 631, 643, 647, 653, 661, 709, 727, 739, 743, 757, 797, 809, 823, 827, 829, 853, 857, 877, 881, 907, 911, 937, 941, 947, 953, 967, 983, 991, 1009, 1019, 1021, 1031, 1033, 1039, 1061, 1063, 1087, 1093, 1123, 1151, 1163, 1171, 1187, 1193, 1201, 1229, 1249, 1259, 1277, 1289, 1291, 1297, 1399, 1409, 1423, 1429, 1451, 1453, 1459, 1481, 1493]
Edytować
Ponieważ nie udało mi się określić górnej granicy, mile widziane są zarówno rozwiązania integracyjne, jak i ekskluzywne.
Edytuj nr 2
Wyzwanie kończy się 1 września, tydzień od początku.
Wygląda na to, że mamy zwycięzcę, ale w przypadku remisu popularność jest rozstrzygająca; w tym przypadku „sekunda” zostanie zrekompensowana poprzez nagrodę.
Odpowiedzi:
Galaretka,
87 bajtówWypróbuj online!
Wyjaśnienie
źródło
Brachylog ,
2723 bajtówWypróbuj online!
Sprawdź wszystkie przypadki testowe.
Predykat 0 (główny predykat)
Predykat 1 (predykat pomocniczy)
źródło
05AB1E , 9 bajtów
Kod:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
Pyke, 10 bajtów
Wypróbuj tutaj!
Również 10 bajtów:
Wypróbuj tutaj!
źródło
Oktawa,
3433 bajtyźródło
MATL , 8 bajtów
Podziękowania dla @alephalpha za jego podejście , które pomogło mi zaoszczędzić 3 bajty
Wypróbuj online!
źródło
Python 3,
1149290 bajtówDzięki @Dennis za -2 bajty
Funkcja, która pobiera dane wejściowe za pomocą argumentu i zwraca nieposortowany zestaw. Jest to wyłączne w odniesieniu do górnej granicy.
Używa metody z odpowiedzi @ xnor tutaj, aby znaleźć liczby pierwsze.
Wypróbuj na Ideone
Jak to działa
Najlepsze znalezisko
Najpierw inicjalizujemy wartość testową
i
i produktP
jako1
oraz listę liczb pierwszychl
jako zestaw zawierający0
. Następnie wykonywana jestwhile
pętla, która testuje wszystkie wartości zi
zakresu[1, u+k-1]
dla pierwotności. Chodzi o to, że pomnożenieP
przezi^2
pod koniec każdej iteracjiP
bierze wartość(i-1)!^2
podczas testowaniai
, tzn. Iloczyn liczb całkowitych[1, i+1]
podniesionych do kwadratu. Rzeczywisty test pierwszeństwa jest następnie wykonywany przez obliczenieP mod i
; jeśli to zwraca zero, toi
nie może być liczbą pierwszą, ponieważ implikuje to, żei
jest podzielna przez co najmniej jedną z wartości, które składają się na produkt. Jeśli to wróci1
, toi
musi być liczbą pierwszą, ponieważ nie jest podzielna przez żadną z wartości w produkcie. Jeślii
jest liczbą pierwszą, jest dołączanal
, a jeśli nie,0
jest dołączana. Kwadrat produktu nie pozwala na fałszywą identyfikację4
jako liczby pierwszej i jest przydatny, ponieważ gwarantuje, że zostanie on zwrócony tylko0
lub wyłącznie1
, umożliwiając wybór wartości, która ma być dołączona, po prostu przez pomnożenie wyniku przezi
.Identyfikacja liczb pierwszych „bliźniaczych”
Teraz tworzymy zestaw furter, zawierający wszystkie elementy
l-k
, jeśli chodzi o elementy. Przecięcie tego zestawu, al
następnie znajduje się za pomocą&
, co pozostawia zestaw zawierający tylko elementy wspólne dla obu zbiorów. Wielei
jest tylko w obu zestawach, gdy obai
ii+k
są pierwszymi, co oznacza, że pozostawia pożądany wynik. Jeśli jednakk
jest liczbą pierwszą,0
będzie występować w obu zestawach, co oznacza, że należy ją usunąć przed powrotem.źródło
k,u=input();i=P=1;l={0};exec'l|={P%i*i};P*=i*i;i+=1;'*(u+k);print{i-k for i in l}&l
działa na 83 bajty w Pythonie 2. Nawet w 3, zbudowanie zestawu w ten sposób powinno zaoszczędzić trochę bajtów.0
z końcowego zestawu, ponieważ jeślik
jest liczbą pierwszą, to przez pomyłkę zostanie zwrócone .R, 98 bajtów
Nie golfowany:
źródło
CJam, 17 bajtów
Albo jako pełny program:
Wypróbuj online!
Lub jako nienazwany blok:
Wypróbuj online!
źródło
Java 7,
185175 bajtówKod niepoznany i testowy:
Wypróbuj tutaj.
Wynik:
źródło
PARI / GP, 39 bajtów
źródło
Mathematica, 43 bajty
Wygeneruj wszystkie liczby pierwsze mniejsze lub równe górnej granicy. Dodaj różnicę wieku do wyniku. Wybierz liczby pierwsze spośród nich. Odejmij różnicę wieku do wyniku.
źródło
Szybki, 142 bajty
źródło
Perl 6 ,
3937 bajtówWyjaśnienie:
źródło
SILOS , 205 bajtów
Wypróbuj online!
Test pierwotności według twierdzenia Wilsona .
źródło
Właściwie 12 bajtów
Dane wejściowe są
u
wtedyk
. Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!Ungolfing:
źródło
R 104 bajty
W przeciwieństwie do innych opublikowanych rozwiązań R, ten pobiera dane wejściowe ze standardowego wejścia.
Nie golfowany:
źródło
JavaScript (ES6),
90838075 bajtówPrzykład:
źródło
Pyth, 13 bajtów
Program, który pobiera dane z listy formularza
[k, u]
i drukuje listę.Wypróbuj online
Jak to działa
źródło