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

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.

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.


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

¿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

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.


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[]

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.


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.