Prodotti di Primes consecutivi


11

Al momento dell'invio alla sandbox, avevo la reputazione del 17017, che sarete tutti in grado di scomporre in 7 × 11 × 13 × 17, un prodotto di 4 numeri primi consecutivi.

Scrivi una funzione o un programma per produrre tutti i prodotti di due o più numeri primi consecutivi fino a un numero intero di input n. Ad esempio, dato n=143che dovresti produrre 6, 15, 30, 35, 77, 105, 143(o un formato di output equivalente).

Si applicano le normali restrizioni su I / O e lacune.

Questo è , quindi vince il programma più breve.



2
L'output deve essere ordinato o no?
Fatalizza il

@Fatalize Avevo voluto che fosse ordinato, ma vedo che non l'ho specificato abbastanza bene e ci sono già diverse risposte che non producono un elenco ordinato.
Neil,

Risposte:


6

Gelatina , 14 10 byte

(senza dubbio c'è da giocare a golf qui! - sì ...)
-4 byte grazie a @Dennis - sostituisci il controllo per maggiore di n usando un intervallo

ÆRẆP€ḟÆRfR

Nota: questo è sia estremamente inefficiente che i risultati non sono ordinati.

Provalo su TryItOnline

Come?

Æ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)

2
Non è necessario µe ³; >Ðḟfunziona bene da solo. fRè ancora più breve.
Dennis,

@Dennis - Attendo il tuo metodo superiore. Grazie!
Jonathan Allan,

4

MATL , 25 20 byte

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

Approccio simile a quello nella risposta di Jonathan Allan .

Provalo online!


Vecchia versione, 25 byte

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

Ciò ottiene gli esponenti della decomposizione del fattore primo per tutti i numeri 1dall'ingresso. Per ognuno controlla:

  1. Se tutti gli esponenti sono inferiori a 2.
  2. Se la somma di tutti gli esponenti è maggiore di 1.
  3. L'array di esponenti viene esteso con uno zero aggiuntivo su ciascuna estremità. Vengono calcolate le differenze consecutive dell'array esteso. Dovrebbero esserci esattamente 2 differenze diverse da zero.

Se le tre condizioni sono soddisfatte, viene visualizzato il numero. I risultati sono in ordine crescente.


4

Javascript (ES6), 105 104 byte

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))}

dimostrazione

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)


2

05AB1E , 17 15 byte

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

Spiegazione

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

Provalo online!


1

Pyth, 18 byte

f}PTftlY.:fP_YSQ)S

Un programma che accetta l'input di un numero intero su STDIN e stampa un elenco di numeri interi.

Provalo online

Come funziona

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

1

Gelatina , 11 byte

ÆfÆCI=1Ȧµ€T

Non è la risposta Jelly più breve, ma questo approccio è piuttosto efficiente e l'output è ordinato.

Provalo online!

Come funziona

Æ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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.