Wielkoduszne liczby


24

Biorąc pod uwagę dodatnią liczbę całkowitą jako dane wejściowe, określ, czy jest to wielkoduszna liczba.

Wielkoduszna liczba to liczba taka, że ​​każde wstawienie +znaku między dowolnymi dwiema cyframi w podstawie 10 powoduje wyrażenie pierwszej liczby całkowitej.

Na przykład 40427 jest wspaniałomyślny, ponieważ

4+0427  = 431  is prime
40+427  = 467  is prime
404+27  = 431  is prime
4042+7  = 4049 is prime

Wydajność

Powinieneś wypisać dwie różne wartości, jedną, gdy wejście jest wspaniałomyślne, a drugą, gdy wejście nie jest.

Punktacja

Celem tego konkursu będzie zmniejszenie rozmiaru kodu źródłowego napisanego w celu rozwiązania tego zadania, podanego w bajtach.

Przypadki testowe

1       -> True
2       -> True
4       -> True
10      -> False
98      -> True
101     -> True
109     -> False
819     -> False
4063    -> True
40427   -> True
2000221 -> True

OEIS 253996


Jestem po prostu zdezorientowany definicją wyzwania, w którym 1 i 2 są nawet prawidłowymi danymi wejściowymi. Nie mówiąc już o tym, że 1ze znakiem plus wstawionym między dowolnymi dwoma znakami (bez wstawiania) może to tylko skutkować 1, co samo w sobie nie jest liczbą pierwszą.
— Magic Octopus Urn

4
@MagicOctopusUrn Znak plus musi być wstawiony między dwie cyfry, dlatego ponieważ 1i 2nie mają dwóch cyfr, zestaw wyrażeń jest pusty. Wszyscy członkowie pustego zestawu są pierwsi. Poza tym żaden z nich nie jest, ale to nie ma sensu. To trochę mylące, dam ci to, ale myślę, że ma to większy sens niż alternatywy.
— Kreator pszenicy

Odpowiedzi:


8

05AB1E , 10 bajtów

Kod

η¨¹.s¨R+pP

Wykorzystuje kodowanie 05AB1E . Wypróbuj online! lub Zweryfikuj wszystkie przypadki testowe!

Wyjaśnienie

η¨             # Take the prefixes of the input and remove the last element
  ¹.s¨         # Take the suffixes of the input and remove the last element
      R        # Reverse the array of suffixes
       +       # Vectorized addition
        p      # Check if each element is prime
         P     # Product of the array

Jak to działa 1 - 9. Produktem pustego zestawu jest 1? Czemu?
— Magic Octopus Urn

@MagicOctopusUrn Pusty produkt zawsze jest równy 1.
— Adnan

@MagicOctopusUrn Przyjmowanie produktu zaczyna się od 1pomnożenia go przez każdy element w zestawie, więc ...
— ETHproductions

1
Ach, matematycznie ma sens. Zgadnij, jak sumon []jest równoważny 0, używając właściwości indukcyjnej, gdy implementacja była całkiem sprytna.
— Magic Octopus Urn

@ jontro Tak, w UTF-8 ma 14 bajtów. Jednak 05AB1E używa strony kodowej 05AB1E , gdzie jest to 10 bajtów.
— Adnan

7

C (gcc) , 8384 85 83 84 86 75 111 bajty

Wszystkie optymalizacje wyłączone i tylko w GCC 32-bit.

-1 bajt dzięki @ceilingcat

+ niektóre bajty na 1skrzynkę.

+ niektóre bajty dla funkcji wielokrotnego użytku.

i,j,r,s;f(a){for(i=10,r=1;a/i;i*=10)for(s=a%i+a/i,r*=s-1,j=2;j<s;)r*=s%j++>0;a=!r;}

Pobiera dane wejściowe jako liczbę całkowitą. Zwraca 1 dla przypadków fałszywych, 0 dla przypadków prawdziwych.

Wypróbuj online!

Zobacz moją kolejną odpowiedź na kod Mathematica (55 bajtów).


To powinny być dwie osobne odpowiedzi. Ponadto, rozwiązanie Mathematica daje niepoprawne wyniki dla 1, 98i 4063.
— ngenisis

6

Siatkówka , 38 bajtów

\B
$`$*_$'$*_
S`\d
G`^_$|^(__+)\1+$
^$

Wypróbuj online!

Drukuje 1dla wspaniałomyślnych liczb i 0nie tylko.

Wyjaśnienie

\B
$`$*_$'$*_

Zaczynamy od dopasowania każdej pozycji między dwiema cyframi (pozycji, które nie są granicami słów) i wstawienia zarówno prefiksu, jak i sufiksu tego dopasowania jako jedności, używając _jako cyfry unary. Zamiast wstawiać +s, bezpośrednio wstawiamy tam jednostkowy wynik sumy.

S`\d

Teraz dzielimy ciąg znaków na cyfry, tak aby każda suma przechodziła przez swoją własną linię i pozbywamy się tych cyfr (będzie też pusta linia wiodąca i końcowa, ale to nie jest ważne).

G`^_$|^(__+)\1+$

Jest to standardowe wyrażenie regularne pasujące do liczb niepierwszych w jednostkowej. Użycie Gtutaj etapu powtórzeń oznacza, że ​​po prostu zachowujemy wszystkie linie zawierające dodatnie wartości niepierwotne (odrzucając puste linie).

^$

Na koniec sprawdzamy, czy ciąg jest pusty. Jeśli wkład był wspaniałomyślny, poprzedni etap odrzucił wszystkie linie (ponieważ wszystkie były liczbami pierwszymi), a to daje nam 1. W przeciwnym razie, jeśli jakakolwiek linia nie będzie liczbą pierwszą, pozostanie w ciągu, a wyrażenie regularne zawiedzie, dając 0.


4

Python 2 , 82 79 78 bajtów

f=lambda n,d=10:n<d or d/n<all((n/d+n%d)%k*f(n,10*d)for k in range(2,n/d+n%d))

Jest to powolne i może poradzić sobie tylko z przypadkami testowymi z zapamiętywaniem.

Wypróbuj online!

Wersja alternatywna, 79 bajtów

f=lambda n,d=10:n<d or f(n,10*d)>d/n<all((n/d+n%d)%k for k in range(2,n/d+n%d))

Przyspieszony kosztem jednego bajtu.

Wypróbuj online!



3

Java 8, 175 171 94 88 bajtów

n->{long d=10,r=0,i,t;for(;d<=n;d*=10,r|=t-i)for(t=n/d+n%d,i=1;t%++i%t>0;);return r==0;}

-77 dzięki @PeterTaylor , wykorzystując arytmetykę (zamiast String z .substring) i pozbywając się oddzielnej metody sprawdzania, czy liczba całkowita jest liczbą pierwszą.
-6 bajtów przy użyciu metody sprawdzania liczby pierwszych @SaraJ , więc pamiętaj o jej głosowaniu!

Wypróbuj tutaj.

Wyjaśnienie:

n->{                  // Method with long as both parameter and return-type
  long d=10,r=0,i,t;  //  Some temp longs
  for(;d<=n           //  Loop as long as `d` is below or equal to input `n`
                      //  (inclusive instead of exclusive due to special case 10)
      ;               //    After every iteration:
       d*=10,         //     Multiple `d` by 10
       r|=t-i)        //     and Bitwise-OR `r` with `t-i`
    for(t=n/d+n%d,    //   Set `t` to `n` integer-divided by `d` plus `n` modulo-`d`
        i=1;          //   Set `i` to 1
        t%++i%t>0;);  //   Inner oop as long as `t` modulo `i+1` modulo `t` is not 0 yet
                      //   (after we've first increased `i` by 1 with `++i`)
                      //   (if `t` equals `i` afterwards, it means `t` is a prime)
  return r==0;}       //  Return if `r` is still 0

1
Myślę, że istnieją co najmniej dwa sposoby skrócenia tego: po pierwsze, zamień pętlę na prekurencję; po drugie, kumuluj wyniki tak, aby funkcja główna wymagała tylko jednej returninstrukcji, tworząc wartość wartownika z pbe -1i &sprawdzając, czy wszystkie zwracane wartości są -1.
— Peter Taylor

1
W rzeczywistości duża jest: nie używaj ciągów.
— Peter Taylor,

n->{for(long d=10,m=1;d<n;d*=10)m|=p(n/d+n%d,2)-2;return m>0;}long p(long n,int i){return i<n?p(n%i<1?1:n,i+1):n;}
— Peter Taylor,

@PeterTaylor Dzięki za sugestie! Jeśli chodzi o sugerowaną funkcję na końcu, czy jesteś pewien, że jest poprawna? Obecnie podaję nieprawidłowe wyniki , chyba że robię coś złego.
— Kevin Cruijssen

1
Ok, d<=nporadzić sobie 10. Przepełnienie stosu nie stanowi problemu (specyfikacja nie podaje zakresu danych wejściowych, które należy obsłużyć), ale można to naprawić i uzyskać więcej oszczędności poprzez powrót do pętli i wstawianie .
— Peter Taylor,

2

Pyth , 14 bajtów

.AmP_ssMcQ]dtU

Wypróbuj online! Wyświetli się, Truejeśli liczba będzie wspaniałomyślna,False przeciwnym razie. Pobiera liczbę jako ciąg znaków.

Objaśnienia

.AmP_ssMcQ]dtU

              Q    # Implicit input Q
            tU     # Generate the range [1, 2, ..., len(Q)-1]
  m                # For each index d in the above range...
        cQ]d       # Split Q at index d
      sM           # Convert the two parts to integers
     s             # Sum
   P_              # Check it is a prime
.A                 # ...end for. Check all elements are True

2

Python 2 , 104 102 98 96 103 bajtów

  • Dzięki @Wheat Wizard dla 2 bajtów: icałkowicie anonimowy, ponieważ jest wywoływany tylko raz.
  • Dzięki @Hyperneutrino za 4 bajty: mądrzejszy sposób uzyskiwania liczb z numeru głównego zamiast krojenia
  • @Hyperneutrino zapisał kolejne 2 bajty: x-1tylko xdla rarnge sprawdzania liczby pierwszych.
  • Naprawiono awarię skrzynki x=10, dodając w ten sposób 7 bajtów, dzięki @Dennis i @Wheat Wizard za wykrycie: moja wcześniejsza wersja uważała 1 za liczbę pierwszą
lambda x:all((lambda x:x>1and all(x%j for j in range(2,x)))(x/10**j+x%10**j)for j in range(1,len(`x`)))

Wypróbuj online!



Fajnie, dzięki @HyperNeutrino
— officialaimm

1
96 bajtów : Nie potrzebujesz x-1znaku na końcu zakresu; zakres jest wyłączny po prawej stronie.
— HyperNeutrino

1
Nie udaje się to w przypadku 10 (nowego przypadku testowego).
— Dennis

1
To się nie udaje dla 10. Uważam również, że 10 to jedyna liczba, dla której się to nie udaje.
— Wheat Wizard

2

Japt , 24 16 bajtów

To była właściwie współpraca między @Shaggy, @ETHproduction i mną.

¬£[YîU UtY]xÃÅej

Wypróbuj online!

Pobiera dane wejściowe jako ciąg.


Gah! Prawie identyczne z alternatywnym rozwiązaniem, nad którym pracowałem! Oto 22 bajty , które do tej pory miałem. EDYCJA: Zmniejszono go do 20 bajtów , łącząc rzeczy z obu.
— Shaggy

@Shaggy Zabawne, pracuję teraz nad moją edycją ... Jest szokująco podobna do twojej: ethproductions.github.io/japt/…
— Oliver

Wskazówka: xautomatycznie konwertuje pozycje z tablicy na liczby ;-)
— ETHproductions

Tak, tam też bym poszedł, @ETHproductions: 16 bajtów .
— Shaggy

Jest też XîUgeniuszem. Myślę, że U¯Xdziała na tę samą długość, ale nadal
— ETHproductions

2

Pip , 25 24 bajtów

$&0N_%,_=1M$+(a^@_)M1,#a

Wypróbuj online!

Wyjaśnienie

ajest pierwszym argumentem wiersza poleceń. 1,#ageneruje zakres zawierający numery 1przez len(a)-1. W tym celu mapujemy funkcję lambda:

$+(a^@_)
   a^@_   Split a at this index
$+(    )  Fold the resulting 2-element list on +

Następnie mapujemy kolejną funkcję lambda 0N_%,_=1, która sprawdza pierwotność. Wziąłem to z tej odpowiedzi ; możesz przeczytać wyjaśnienie tam. Na koniec składamy listę na logicznym AND ( $&). Wynik jest taki, że 1wszystkie sumy były liczbami pierwszymi,0 jeśli żadna z nich nie była.

Przykład z wprowadzeniem 4063:

                    1,#a   [1; 2; 3]
           $+(a^@_)M       [67; 103; 409]
  0N_%,_=1M                [1; 1; 1]
$&                         1

2

CJam , 22 bajty

r:L,({)_L<i\L>i+mp!},!

Wypróbuj online!

Wyświetla dodatnią liczbę całkowitą dla prawdy, zero dla fałszu.

-1 dzięki sprytnej sztuczce Petera Taylora .
-3 dzięki kolejnej wskazówce Petera Taylora.


0&!jest krótszy niż1+:*
— Peter Taylor

@PeterTaylor Ooh, to sprytne ... nadużyłeś faktu, że !zwraca wartość logiczną i użyłeś przecięcia zestawu z wartością falsy, 0dzięki czemu możesz zrobić 0&!w 3 zamiast 1&!!...
— Erik Outgolfer

Możesz zapisać kolejne 3 bajty, przypisując dane wejściowe do zmiennej, co upraszcza manipulowanie stosem i używając ,operatora filtru zamiast f.
— Peter Taylor,

PS Nie widzę żadnych nadużyć podczas !konwersji na wartość logiczną: było to standardowe w GolfScript i standardowe w CJam. I 1&!!byłoby niepoprawne: 0&!to oczywisty test, ponieważ wymaganie jest forall, nie istnieje.
— Peter Taylor

@PeterTaylor Nie to miałem na myśli ...: P
— Erik the Outgolfer

2

Japt , 23 bajty

Pobiera dane wejściowe jako ciąg.

Cholera; pokonany na znacznie krótszą alternatywę, nad którą pracowałem.

£i+Ýe@OxXr"%+0+"'+)j

Sprawdź to


@ETHproductions, nie, miałeś rację; oryginalna wersja była zła; sprawdzanie tylko wspaniałomyślnych liczb pierwszych . ¬£i+YÄÃe@OxX j
— Kudłaty

Wiedziałem, że nie
— oszalałem

1
Nie 4063działa (powinno być prawdą, jest fałszywe). Sztuczka polega na tym, że JS myśli, że prowadzący 0oznacza, że ​​chcesz ósemkowy ...
— ETHproductions

Hmmm ... OK, myślę, że mam alternatywę - przetestowanie i zagranie w golfa zajmie kilka minut.
— Kudłaty

Myślę, że to się teraz nie powiedzie w niektórych przypadkach, które zawierają dwa zera, po których następują dwie inne cyfry ... ( 40043na przykład) Po prostu dodaj +po, 0aby to naprawić.
— ETHproductions

2

Mathematica, 75 bajtów

And@@Table[PrimeQ@ToExpression@StringInsert[#,"+",n],{n,2,StringLength@#}]&

Functionktóry oczekuje String. PrimeQ@ToExpression@StringInsert[#,"+",n]zwraca, czy wstawienie cyfry +po nth daje liczbę pierwszą. Table[...,{n,2,StringLength@#}]podaje listę tych wartości w nzakresie od 2do długości ciągu. Następnie bierzemy Andkażdy z elementów tej listy. Dogodnie, jeśli StringLength@#<2, to Table[...]jest pusta lista, dla którejAnd@@{}==True


2

Mathematica, 55 50 45 49 50 54 62 bajty

Wygląda na to, że powinienem to opublikować osobno.

Zmierzono +6 bajtów długości kodu.

+5 bajtów dzięki ngenisis.

And@@(qPrimeQ[#~Mod~q+⌊#/q⌋])@Rest@PowerRange@#&

Pobiera dane wejściowe jako liczbę całkowitą i zwraca wartość regularną Trueoraz False. W międzyczasie jest unicode 0xF4A1, skrót Function[,]. Długość kodu jest mierzona na podstawie rozmiaru pliku (UTF-8 bez BOM), komentarz, jeśli nie jest poprawny.

PowerRange[x]zwraca 1, 10, 100 ... nie większy niż x, co zostało wprowadzone w Mathematica 10.


2

Zwykły angielski 4 204 341 315 251 241 240 bajtów

(Ponownie) wprowadził testy pierwszeństwa do biblioteki Plain English, przenosząc 3 863 bajty do biblioteki Plain English. Usunięto 26 bajtów białych znaków. Zaoszczędzono 64 bajty, skracając zmienne lokalne. Zapisano 10 bajtów, skracając interfejs. Zgodnie z sugestią RosLuP zaoszczędzono 1 bajt, zmieniając sposób inicjowania i zwiększania wartości m.

To decide if a n number is g:
Put 1 in a m number.
Loop.
Multiply the m by 10.
If the m is greater than the n, say yes.
Divide the n by the m giving a q quotient and a r remainder.
Add the q to the r.
If the r is not prime, say no.
Repeat.

Nieskluczona wersja ostatecznego kodu:

To decide if a number is magnanimous:
  Put 1 in another number.
  Loop.
    Multiply the other number by 10.
    If the other number is greater than the number, say yes.
    Divide the number by the other number giving a quotient and a remainder.
    Add the quotient to the remainder.
    If the remainder is not prime, say no.
  Repeat.

Uwagi: Zwykły angielski IDE jest dostępny na stronie github.com/Folds/english . IDE działa w systemie Windows. Kompiluje się do 32-bitowego kodu x86.

Osmosian Zamówienie jest dynamiczny widelec zwykłego angielskiego już pierwszości testowania w wersji 4700, ale jest używany algorytm bardzo nieefektywne (od stycznia do czerwca 2017 roku). W wersjach 4001-4011 dynamicznego rozwidlenia witryny GitHub pominięto testowanie pierwszeństwa. Wersja 4013 dynamicznego rozwidlenia witryny GitHub zawiera testy pierwotności. Kod do przeprowadzania testów pierwotności został opracowany w ramach poprzednich wersji tej odpowiedzi.


1

Perl 6 , 58 bajtów

{?(10,10* *...^*>$_).map({$_ div$^a+$_%$^a}).all.is-prime}

Wypróbuj online!

10, 10 * * ...^ * > $_to geometryczna sekwencja wielokrotności dziesięciu, podejmowana do jednego przed elementem, który przekracza parametr wejściowy $_. Następnie sprawdzamy, czy dla każdej potęgi dziesięciu suma parametru wejściowego pobrana div i mod ta moc jest liczbą pierwszą.


1

Haskell, 114 110 bajtów

p x=[x]==[i|i<-[2..x],x`mod`i<1]
i!x|i<1=0<1|0<1=p(uncurry(+)$divMod x$10^i)&&(i-1)!x
f x=(length(show x)-1)!x

Nieoznakowany z wyjaśnieniem:

-- Check if x is a prime number
p x = [x] == [i | i<-[2..x], x`mod`i < 1]
-- Checks all pairs of numbers a '+' can be put in between
i ! x | i<1 = 0<1                                -- Single-digit numbers are always truthy
      | 0<1 = p (uncurry (+) $ divMod x $ 10^i)  -- Does x split at i digits from right sum up to a prime?
           && (i-1) ! x                          -- If so, check next pair
-- Start (!) with the number of digits in x minus one
f x = (length (show x)-1) ! x

Jeśli użyjesz p x=[x]==[i|i<-[2..x],x`mod`i<1]jako czeku głównego, możesz zapisać 2 bajty.
— Wheat Wizard

Możesz także użyć divMod x$10^izamiastx`divMod`(10^i)
— Wheat Wizard

@WheatWizard: Wiedziałem, że podstawowy test można jeszcze jakoś ulepszyć. ;) Dzięki!
— siracusa

1

Aksjomat, 88 bajtów

f(n:PI):Boolean==(i:=10;repeat(q:=n quo i;q=0 or ~prime?(q+n rem i)=>break;i:=i*10);q=0)

test i wyniki

(10) -> [[i,f(i)]  for i in [1,2,4,10,98,101,109,819,4063,40427,2000221,999999999999999999999999999999999999999999999]]
   (10)
   [[1,true], [2,true], [4,true], [10,false], [98,true], [101,true],
    [109,false], [819,false], [4063,true], [40427,true], [2000221,true],
    [999999999999999999999999999999999999999999999 ,false]]


1

Perl 6 , 35 bajtów

{m:ex/^(.+)(.+)$/.all.sum.is-prime}

Wypróbuj online!

Wyjaśnienie:

{                                 }     # Anonymous code block that
 m:ex/^        $/                         # Match all
       (.+)(.+)                           # Splits of the input number
                 .all                     # Are all of them
                     .sum                   # When summed
                         .is-prime          # Prime?

0

Skumulowane , 51 bajtów

[tostr:#'1-~>splitat tr['+',' '#`#~prime]map 1,all]

Wypróbuj online!

To jest funkcja. Działa poprzez konwersję argumentu na ciąg ( tostr), powielanie go i uzyskiwanie jego długości ( :#'), odejmowanie 1 ( 1-), tworząc zakres od 1 do tej liczby ( ~>). Stos wygląda mniej więcej tak 40427:

('40427' (1 2 3 4))

Wykonujemy wektoryzację splitat, w wyniku czego następująca tablica znajduje się na górze stosu:

(('4' '40' '404' '4042') ('0427' '427' '27' '7'))

Transponując to tr, otrzymujemy:

(('4' '0427') ('40' '427') ('404' '27') ('4042' '7'))

Następnie mapujemy funkcję ['+',' '## ~ prime] (withmap`). Ta funkcja:

['+',' '#`#~prime]
 '+',                concatenate a plus sign (string)    `('4' '0427' '+')
     ' '#`           join by spaces                      `'4 0427 +'`
          #~         evaluate                            `431`
            prime    check primality                     `1`

Następnie po mapie konkatenujemy 1. Dzieje się tak, ponieważ allzwraca undefpustą listę.


0

JavaScript (ES6), 70 bajtów

P=(n,x=2)=>n%x?P(n,x+1):n==x
f=(n,i=10)=>i>n||P((n/i|0)+n%i)&f(n,i*10)

Błąd ostatniego przypadku w mojej przeglądarce z powodu błędu „zbyt dużej rekurencji” podczas obliczania P(200023). Mam nadzieję, że to nie unieważnia tego.


0

QBIC , 38 bajtów

_L;|[a-1|q=q*µ!_sA,b|!+!_sA,b+1,a|!}?q

Wyjaśnienie

_L |     Create a variable a and set it to the length of
  ;      the input string (A$)
[a-1|    FOR b = 1 to a-1
q=q*     multiply q by
 µ       -1 if prime, 0 if not, of
  !        a cast of 
   _s       a substring of
     A,       A$
     b        from index 1 to index b (only one index is given, so that is assumed to be the req. length from 1)
      |!   to number
 +         plus
 !         a cast of
  _s         a substring of
    A,         A$
    b+1        from index b+1
    ,a         for the length of a (does not error if it exceeds the end of the string)
      |!   to number
 }       NEXT 
 ?q      PRINT q, which is eitrher -1 or 1 for all-prime sums, or 0 otherwise

0

CJam (21 bajtów)

r:R,({RiA@)#md+mp!},!

Demo online , zestaw testów on-line

Sekcja

r:R       e# Take a token of input and assign it to R
,(        e# Take the length of R minus one
{         e# Filter i = 0 to (length of R minus two)
  Ri      e#   Push R as an integer value
  A@)#    e#   Push 10 to the power of (i + 1)
  md      e#   divmod
  +mp!    e#   Add, primality test, negate result
},        e# The result of the filter is a list of splits which give a non-prime
!         e# Negate result, giving 0 for false and 1 for true


0

APL (NARS), znaki 35, bajty 70

{0≥k←¯1+≢⍕⍵:1⋄∧/0π(m∣⍵)+⌊⍵÷m←10*⍳k}

test:

  f←{0≥k←¯1+≢⍕⍵:1⋄∧/0π(m∣⍵)+⌊⍵÷m←10*⍳k}
  f¨1 2 4 10 98 101 109 819 4063 40427 2000221
1 1 1 0 1 1 0 0 1 1 1 

To byłoby tłumaczenie w APL z Axiom post algo tutaj ...

{0≥k←¯1+≢⍕⍵:1⋄∧/0π(m∣⍵)+⌊⍵÷m←10*⍳k}
 0≥k←¯1+≢⍕⍵:1⋄  assign to k the length as array of argument return 1 if that is <=0
 ∧/0π(m∣⍵)+⌊⍵÷m←10*⍳k
              m←10*⍳k  m is the array pow(10,1..k)
           ⌊⍵÷m       the array of quotient of argumet with m
          +           sum 
     (m∣⍵)            with array of remander
   0π                 build the binary array of "are prime each"
 ∧/                   and that array

0

PHP, 100 bajtów

for(;++$k<strlen($a=$argn);$x+=$i==1)for($i=$n=substr($a,$k)+$b.=$a[$k-1];--$i&&$n%$i;);echo$x+2>$k;

wypisuje, 1jeśli dane wejściowe są wspaniałe, puste dane wyjściowe, jeśli nie. Uruchom jako potok z -nRlub spróbuj online .


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.