Gere alguns números aproximados

15

fundo

Um número npode ser descrito como B-rough se todos os fatores primos nexcederem estritamente B.

O desafio

Dados dois números inteiros positivos Be k, k Bimprima os primeiros números -rough.

Exemplos

Let f(B, k)Ser uma função que retorna o conjunto contendo os primeiros k Bnúmeros -rough.

> 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
fonte
2
Você pode elaborar sobre o desafio? Eu não entendo isso Talvez explique os exemplos?
db
Não entendo por que você inclui 1 em todas as suas respostas quando nunca é maior que B?
precisa saber é o seguinte
1
1 não tem fatores primos, por isso cada fator primordial de 1 é maior que B e 1 deve aparecer no independente do B. saída
capa
@db Fatore ncomo números primos. Se todos esses números primos forem maiores que B, n é B-rough.
Addison Crump #
@AddisonCrump Então, por exemplo, como os números primos para 35 são 5 e 7, 35 é 4-áspero? Isso é uma terminologia comum reconhecida? Nunca ouvi falar disso antes. Ainda não entendo os exemplos, especialmente o último. 14 números, mas o que é 10 ??
db

Respostas:

5

Haskell , 53 44 bytes

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

Experimente online!

Graças 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
fonte
Isso pode ser um pouco simplificado
H.PWiz
@ H.PWiz Certo, de alguma forma, só pensei em colocar a (>b)parte dentro da compreensão (que não funciona), mas não o contrário. Obrigado!
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]

Experimente online!

Obrigado a shooqie por salvar 5 bytes.

Isso pressupõe que o número k'th B-áspero nunca excederá Bk , o que eu não sei como provar, mas parece uma suposição bastante segura (e não consigo encontrar nenhum contra-exemplo).

Solução 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

Experimente online!

Esta solução não faz a solução acima. E é muito mais eficiente.

DJMcMayhem
fonte
3
Hmm, essa suposição é provavelmente verificável, mas um problema interessante, no entanto. Vou concorrer por uma prova.
Addison Crump #
1
Por que não lambda B,k:[i for i in range(1,-~B*k)if all(i%j for j in range(2,B+1))][:k]?
Shooqie 3/11
1
@BlackOwlKai Isso parece legal. Veja também math.stackexchange.com/questions/2983364/…
Anush
@Anush Infelizmente, a minha prova não funcionou, porque eu cometi um erro
Coruja preta Kai
3

Perl 6 , 35 32 bytes

-3 bytes graças a nwellnof!

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

Experimente online!

Um bloco de código anônimo que usa dois números inteiros e retorna uma lista de números inteiros.

Explicação

{                              }  # 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
Brincadeira
fonte
O que allfaz?
Addison Crump #
1
O @AddisonCrump allverifica se todos os elementos da lista são verdadeiros. Eu estarei adicionando uma explicação para toda a coisa logo
Jo rei
@nwellnhof Wow! Então é para isso que as junções são úteis!
Jo rei
Sim, observe que você também pode usar em [&]vez de all.
Nwellnhof 3/11
@AddisonCrump Acho que allnão está mais sendo usado dessa maneira, por isso devo atualizar minha resposta. allcria uma junção dos valores no intervalo 2..be todas as operações executadas na junção são executadas em todos os valores simultaneamente. Quando é avaliada em contexto booleano pelo grep, este colapsa em se todos os valores na junção são truthy, ou seja, diferente de zero
Jo rei
3

Casca , 9 8 bytes

↑foΛ>⁰pN

Experimente online!

Toma B como primeiro e k como segunda entrada.

↑         -- 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
fonte
2

Carvão , 33 bytes

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

Experimente online! Link é a versão detalhada do código. Explicação:

NθNη

Entrada Be k.

≔⁰ζ

Defina zcomo 0.

W‹Lυη«

Repita até termos kvalores.

≦⊕ζ

Incremento z.

¿¬Φθ∧κ¬﹪ζ⊕κ

Divida zpor todos os números de 2até Be veja se o restante é zero.

⊞υζ»

Caso contrário, empurre zpara a lista vazia predefinida.

Iυ

Transmitir a lista para string e enviá-la implicitamente.

Neil
fonte
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

Experimente online!

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
fonte
1

Gelatina , 10 bytes

1µg³!¤Ịµ⁴#

Experimente online!

Como 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
fonte
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

Acima, parece que as linhas após 'r ← afw; i' têm nomes 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│
└~────────────────────────────────────────┘
RosLuP
fonte
1

05AB1E , 9 bytes

∞ʒÒ¹›P}²£

Experimente online ou verifique todos os casos de teste .

Explicação:

          # 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
fonte