Genera alcuni numeri approssimativi


15

sfondo

Un numero npuò essere descritto come B-se se tutti i fattori primi di nrigorosamente superano B.

La sfida

Dati due numeri interi positivi Be k, emettere i k Bnumeri del primo passaggio.

Esempi

Lascia che f(B, k)sia una funzione che restituisce l'insieme contenente i k Bnumeri di primo passaggio.

> f(1, 10)
1, 2, 3, 4, 5, 6, 7, 8, 9, 10

> f(2, 5)
1, 3, 5, 7, 9

> f(10, 14)
1, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59

2
Puoi approfondire la sfida? Non lo capisco Forse spiegare gli esempi?
db

Non capisco perché includi 1 in tutte le tue risposte quando non è mai maggiore di B?
kamoroso94,

1
1 non ha fattori primi, quindi ogni fattore primo di 1 è maggiore di B e 1 dovrebbe apparire nell'output indipendentemente da B.
Hood

@db Fattorizza nin numeri primi. Se tutti questi numeri primi sono maggiori di B, n è B-rough.
Addison Crump,

@AddisonCrump Quindi, ad esempio, poiché i numeri primi per 35 sono 5 e 7, 35 è 4-grezzo? Si tratta di una terminologia comune riconosciuta? Non ne ho mai sentito parlare prima. Ancora non lo faccio sotto gli esempi, specialmente non l'ultimo. 14 numeri ma quanto fa 10 ??
db

Risposte:


5

Haskell , 53 44 byte

b%k=take k[n|n<-[1..],all((>0).mod n)[2..b]]

Provalo online!

Grazie a H.PWiz per -9 byte!

b%k=                       -- given inputs b and k
 take k                    -- take the first k elements from 
  [n|n<-[1..]              -- the infinite list of all n > 0
   ,all            [2..b]] -- where all numbers from 2 to b (inclusive)
      ((>0).mod n)         -- do not divide n.

Questo può essere semplificato in qualche modo
H.Piz,

@ H.PWiz Bene, in qualche modo ho pensato solo di prendere la (>b)parte all'interno della comprensione (che non funziona) ma non viceversa. Grazie!
Laikoni,

5

Python 3 , 80 , 75 byte

lambda B,k:[i for i in range(1,-~B*k)if all(i%j for j in range(2,B+1))][:k]

Provalo online!

Grazie a shooqie per aver salvato 5 byte.

Questo presuppone che il k-esimo numero B-rough non supererà mai B*K , cosa che non so dimostrare, ma sembra un presupposto abbastanza sicuro (e non riesco a trovare alcun controesempio).

Soluzione alternativa:

Python 2 , 78 byte

B,k=input()
i=1
while k:
 if all(i%j for j in range(2,B+1)):print i;k-=1
 i+=1

Provalo online!

Questa soluzione non costituisce la soluzione sopra. Ed è molto più efficiente.


3
Hmm, questa ipotesi è probabilmente verificabile, ma comunque un problema interessante. Riconoscerò una prova.
Addison Crump,

1
Perché no lambda B,k:[i for i in range(1,-~B*k)if all(i%j for j in range(2,B+1))][:k]?
shooqie,

1
@BlackOwlKai Sembra fantastico. Vedi anche math.stackexchange.com/questions/2983364/…
Anush

@Anush Purtroppo, la mia prova non ha funzionato, perché ho fatto un errore
Black Owl Kai


3

Perl 6 , 35 32 byte

-3 byte grazie a nwellnof!

{grep(*%all(2..$^b),1..*)[^$^k]}

Provalo online!

Un blocco di codice anonimo che accetta due numeri interi e restituisce un elenco di numeri interi.

Spiegazione

{                              }  # Anonymous code block
 grep(             ,1..*)        # Filter from the positive integers
      *              # Is the number
       %             # Not divisible by
        all(      )  # All of the numbers
            2..$^b   # From 2 to b
                         [^$^k]   # And take the first k numbers

Cosa fa all?
Addison Crump,

1
@AddisonCrump allverifica se tutti gli elementi nell'elenco sono veritieri. A breve aggiungerò una spiegazione per l'intera faccenda
Jo King,

@nwellnhof Wow! Ecco a cosa servono gli svincoli!
Jo King,

Sì, tieni presente che puoi anche usare [&]invece di all.
nwellnhof,

@AddisonCrump Suppongo che allnon venga più utilizzato in questo modo, quindi dovrei aggiornare la mia risposta. allcrea una giunzione dei valori nell'intervallo 2..be qualsiasi operazione eseguita sulla giunzione viene eseguita contemporaneamente su tutti i valori. Quando viene valutato nel contesto booleano da grep, questo si riduce alla verità se tutti i valori nella giunzione sono veritieri, cioè diversi da zero
Jo King,

3

Buccia , 9 8 byte

↑foΛ>⁰pN

Provalo online!

BK

↑         -- take the first k elements 
       N  -- from the natural numbers
 f        -- filtered by
  o   p   -- the prime factors
   Λ>⁰    -- are all larger than the first input

2

Carbone , 33 byte

NθNη≔⁰ζW‹Lυη«≦⊕ζ¿¬Φθ∧κ¬﹪ζ⊕κ⊞υζ»Iυ

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

NθNη

Input Be k.

≔⁰ζ

Impostare zsu 0.

W‹Lυη«

Ripeti fino a quando non abbiamo kvalori.

≦⊕ζ

Incremento z.

¿¬Φθ∧κ¬﹪ζ⊕κ

Dividi zper tutti i numeri da 2a Be vedi se qualche resto è zero.

⊞υζ»

In caso contrario, spingere znell'elenco vuoto predefinito.

Iυ

Trasmetti l'elenco in stringa e lo genera implicitamente.


2

JavaScript (ES6), 68 byte

Accetta input come (b)(k).

b=>k=>(o=[],n=1,g=d=>(d<2?o.push(n)==k:n%d&&g(d-1))||g(b,n++))(b)&&o

Provalo online!

Commentate

b => k => (             // input = b and k
  o = [],               // o[] = output array
  n = 1,                // n = value to test
  g = d => (            // g = recursive function, taking the divisor d
    d < 2 ?             // if d = 1:
      o.push(n) == k    //   push n into o[] and test whether o[] contains k elements
    :                   // else:
      n % d && g(d - 1) //   if d is not a divisor of n, do a recursive call with d - 1
    ) ||                // if the final result of g() is falsy,
    g(b, n++)           // do a recursive call with d = b and n + 1
)(b)                    // initial call to g() with d = b
&& o                    // return o[]

1

Gelatina , 10 byte

1µg³!¤Ịµ⁴#

Provalo online!

Come funziona

1µg³!¤Ịµ⁴#    Dyadic main link. Left = B, right = k
       µ⁴#    Take first k numbers satisfying...
  g             GCD with
   ³!¤          B factorial
      Ị         is insignificant (abs(x) <= 1)?
1µ            ... starting from 1.


1

APL (NARS), 52 caratteri, 104 byte

r←a f w;i
r←,i←1⋄→3
i+←1⋄→3×⍳∨/a≥πi⋄r←r,i
→2×⍳w>↑⍴r

Sopra sembra che le righe dopo 'r ← afw; i' abbiano nomi 1 2 3; test:

  o←⎕fmt
  o 1 h 2
┌2───┐
│ 1 2│
└~───┘
  o 1 h 1
┌1─┐
│ 1│
└~─┘
  o 10 h 14
┌14───────────────────────────────────────┐
│ 1 11 13 17 19 23 29 31 37 41 43 47 53 59│
└~────────────────────────────────────────┘

1

05AB1E , 9 byte

∞ʒÒ¹›P}²£

Provalo online o verifica tutti i casi di test .

Spiegazione:

          # Infinite list starting at 1: [1,...]
 ʒ    }    # Filter it by:
  Ò        #  Get all prime factors of the current number
   ¹›      #  Check for each if they are larger than the first input
     P     #  And check if it's truthy for all of them
       ²£  # Leave only the leading amount of items equal to the second input
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.