Produkty kolejnych liczb pierwszych

11

W chwili poddania się piaskownicy miałem reputację 17017, którą wszyscy moglibyście podzielić na 7 × 11 × 13 × 17, iloczyn 4 kolejnych liczb pierwszych.

Napisz funkcję lub program, aby wyprowadzał wszystkie produkty dwóch lub więcej kolejnych liczb pierwszych do wejściowej liczby całkowitej n. Na przykład, biorąc pod uwagę, n=143że powinieneś wydrukować 6, 15, 30, 35, 77, 105, 143(lub równoważny format wyjściowy).

Obowiązują normalne ograniczenia we / wy i luki.

To jest , więc wygrywa najkrótszy program.

Neil
źródło
4
oeis.org/A097889
Robert Fraser
2
Czy dane wyjściowe powinny być sortowane, czy nie?
Fatalize
@Fatalize Miałem zamiar to posortować, ale widzę, że nie sprecyzowałem go wystarczająco dobrze i jest już kilka odpowiedzi, które nie dają posortowanej listy.
Neil

Odpowiedzi:

6

Galaretka , 14 10 bajtów

(bez wątpienia jest tu gra w golfa! - tak ...) -
4 bajty dzięki @Dennis - zamień czek na większy niż n, używając zakresu

ÆRẆP€ḟÆRfR

Uwaga - jest to zarówno wyjątkowo nieefektywne, jak i wyniki nieposortowane.

Przetestuj w TryItOnline

W jaki sposób?

ÆRẆP€ḟÆRfR - main link takes an argument, n
ÆR    ÆR   - primes up to n
  Ẇ        - all sublists
   P€      - product for each
     ḟ     - filter out the primes (since the sublists include those of lnegth 1)
        fR - filter out any not in range [1,N]
             (yep, it's calculating all products of primes up to n - gross)
Jonathan Allan
źródło
2
Nie potrzebujesz µi ³; >Ðḟdziała dobrze samodzielnie. fRjest jeszcze krótszy.
Dennis
@Dennis - Czekam na Twoją lepszą metodę. Dzięki!
Jonathan Allan
4

MATL , 25 20 bajtów

Zq&Xf"@gnq?2MpG>~?6M

Podejście podobne do tego w odpowiedzi Jonathana Allana .

Wypróbuj online!


Stara wersja, 25 bajtów

:YF!"@2<@sq0@0hhdz2=v?X@D

Uzyskuje to wykładniki rozkładu czynnika pierwszego dla wszystkich liczb od 1do danych wejściowych. Dla każdego sprawdza:

  1. Jeśli wszystkie wykładniki są mniejsze niż 2.
  2. Jeśli suma wszystkich wykładników jest większa niż 1.
  3. Tablica wykładników jest rozszerzona o dodatkowe zero na każdym końcu. Obliczane są kolejne różnice w rozszerzonej tablicy. Powinny istnieć dokładnie 2 niezerowe różnice.

Jeśli trzy warunki są spełnione, wyświetlana jest liczba. Wyniki są w kolejności rosnącej.

Luis Mendo
źródło
4

JavaScript (ES6), 105 104 bajtów

n=>{for(i=1,P=[];i++<n;P[P.every(v=>i%v)?i:n]=i);P.map(i=>P.map(j=>j>i&&(p*=j)<=n&&console.log(p),p=i))}

Próbny

var f =
n=>{for(i=1,P=[];i++<n;P[P.every(v=>i%v)?i:n]=i);P.map(i=>P.map(j=>j>i&&(p*=j)<=n&&console.log(p),p=i))}

f(143)

Arnauld
źródło
2

05AB1E , 17 15 bajtów

L<ØŒ€PD¹>‹ÏDp_Ï

Wyjaśnienie

L<Ø                 # get the first N primes, where N is the input
   Œ                # get all combinations of consecutive primes
    €P              # calculate the product of these sublists
      D¹>‹Ï         # keep only the products less than or equal to N
           Dp_Ï     # keep only those that aren't prime

Wypróbuj online!

Emigna
źródło
1

Pyth, 18 bajtów

f}PTftlY.:fP_YSQ)S

Program, który pobiera liczbę całkowitą na STDIN i drukuje listę liczb całkowitych.

Wypróbuj online

Jak to działa

f}PTftlY.:fP_YSQ)S  Program. Input: Q
              SQ    Yield [1, 2, 3, ..., Q]
          fP_Y      Filter that by primality
        .:      )   Yield all sublists of that
    f               Filter the sublists by:
      lY             Length
     t               -1
                    removing sublists of length 1
f                S  Filter [1, 2, 3, ..., Q] (implicit input fill) by:
  PT                 Prime factorisation
 }                   is in the sublists
                    Implicitly print
TheBikingViking
źródło
1

Galaretka , 11 bajtów

ÆfÆCI=1Ȧµ€T

Nie jest to najkrótsza odpowiedź Jelly, ale to podejście jest raczej wydajne, a wyniki są sortowane.

Wypróbuj online!

Jak to działa

ÆfÆCI=1Ȧµ€T  Main link. Argument: n

        µ€   Map the preceding chain over each k in [1, ..., n].
Æf             Compute all prime factors of k, with multiplicities.
  ÆC           Count the number of primes less than or equal to each prime factor.
               This maps the j-th to j.
    I          Increments; compute the forward differences of consecutive indices.
     =1        Compare each difference with 1.
       Ȧ       All; return 1 iff the array is non-empty and has no zeroes.
          T  Truth; yield all indices for which the chain returned 1.
Dennis
źródło