Generar algunos números aproximados

15

Antecedentes

Un número npuede describirse como a Btravés si todos los factores primos nexceden estrictamente B.

El reto

Dados dos enteros positivos By k, salida de los k Bnúmeros de primer paso.

Ejemplos

Dejado f(B, k)ser una función que devuelve el conjunto que contiene los k Bnúmeros de primer paso.

> 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
Addison Crump
fuente
2
¿Puedes dar más detalles sobre el desafío? No lo entiendo ¿Quizás explicar los ejemplos?
Db
No entiendo por qué incluye 1 en todas sus respuestas cuando nunca es mayor que B?
kamoroso94
1
1 no tiene factores primos, por lo que cada factor primo 1 es mayor que B y 1 debería aparecer en la salida independiente de B.
Campana
@db Factorizar nen primos. Si todos esos números primos son mayores que B, n es Bpasante.
Addison Crump
@AddisonCrump Entonces, por ejemplo, dado que los primos para 35 son 5 y 7, 35 es 4-bruto? ¿Es esta una terminología común reconocida? Nunca oí de eso antes. Todavía no lo hago con los ejemplos, especialmente el último. 14 números pero que es 10 ??
Db

Respuestas:

5

Haskell , 53 44 bytes

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

Pruébalo en línea!

¡Gracias a H.PWiz por -9 bytes!

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.
Laikoni
fuente
Esto puede simplificarse un poco
H.PWiz
@ H.PWiz Correcto, de alguna manera solo pensé en tomar la parte (>b)dentro de la comprensión (que no funciona) pero no al revés. ¡Gracias!
Laikoni
5

Python 3 , 80 , 75 bytes

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

Pruébalo en línea!

Gracias a shooqie por guardar 5 bytes.

Esto supone que el k-ésimo número B-aproximado nunca excederá sik , lo cual no sé cómo probar, pero parece una suposición bastante segura (y no puedo encontrar ningún contraejemplo).

Solución alternativa:

Python 2 , 78 bytes

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

Pruébalo en línea!

Esta solución no hace la solución anterior. Y es mucho más eficiente.

DJMcMayhem
fuente
3
Hmm, esa suposición es probablemente verificable, pero no obstante es un problema interesante. Recompensaré por una prueba.
Addison Crump
1
¿Por qué 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 Eso suena genial. Ver también math.stackexchange.com/questions/2983364/…
Anush
@Anush Lamentablemente, mi prueba no funcionó, porque cometí un error
Black Owl Kai el
3

Perl 6 , 35 32 bytes

-3 bytes gracias a nwellnof!

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

Pruébalo en línea!

Un bloque de código anónimo que toma dos enteros y devuelve una lista de enteros.

Explicación

{                              }  # 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
Jo King
fuente
¿Qué allhacer?
Addison Crump
1
@AddisonCrump allcomprueba si todos los elementos de la lista son verdaderos. Agregaré una explicación para todo en breve
Jo King,
@nwellnhof ¡Guau! ¡Así que para eso son útiles las uniones!
Jo King el
Sí, tenga en cuenta que también podría usar en [&]lugar de all.
nwellnhof el
@AddisonCrump, supongo que allya no se usa de esa manera, así que debería actualizar mi respuesta. allcrea una unión de los valores en el rango 2..b, y cualquier operación realizada en la unión se realiza en todos los valores de forma simultánea. Cuando es evaluado en contexto booleano por grep, esto colapsa en si todos los valores en la unión son verdaderos, es decir, no cero
Jo King
3

Casco , 9 8 bytes

↑foΛ>⁰pN

Pruébalo en línea!

sik

↑         -- 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
Laikoni
fuente
2

Carbón , 33 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

NθNη

Entrada B y k.

≔⁰ζ

Conjunto z en 0.

W‹Lυη«

Repite hasta que tengamos k valores.

≦⊕ζ

Incremento z .

¿¬Φθ∧κ¬﹪ζ⊕κ

Dividir zpor todos los números de2 a By vea si el resto es cero.

⊞υζ»

Si no, entonces presione z a la lista vacía predefinida.

Iυ

Convierta la lista en una cadena e implíquela en la salida.

Neil
fuente
2

JavaScript (ES6), 68 bytes

Toma entrada como (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

Pruébalo en línea!

Comentado

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[]
Arnauld
fuente
1

Jalea , 10 bytes

1µg³!¤Ịµ⁴#

Pruébalo en línea!

Cómo funciona

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.
Bubbler
fuente
1

APL (NARS), 52 caracteres, 104 bytes

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

Arriba parece que las filas después de 'r ← afw; i' tienen nombres 1 2 3; prueba:

  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│
└~────────────────────────────────────────┘
RosLuP
fuente
1

05AB1E , 9 bytes

∞ʒÒ¹›P}²£

Pruébelo en línea o verifique todos los casos de prueba .

Explicación:

          # 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
Kevin Cruijssen
fuente