Wygeneruj przybliżone liczby

15

tło

Liczbę nmożna opisać jako B-do, jeśli wszystkie podstawowe czynniki nściśle przekraczająB .

Wyzwanie

Biorąc pod uwagę dwie dodatnie liczby całkowite Bi kwyprowadzamy pierwsząk B wypisz liczby.

Przykłady

Niech f(B, k)będzie funkcją, która zwraca zestaw zawierający k Bliczby pierwsze .

> 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
źródło
2
Czy potrafisz rozwinąć wyzwanie? Nie rozumiem tego Może wyjaśnić przykłady?
db
Nie rozumiem, dlaczego umieściłeś 1 we wszystkich swoich odpowiedziach, skoro nigdy nie jest większa niż B?
kamoroso94,
1
1 nie ma czynników pierwszych, więc każdy czynnik pierwszy 1 jest większy niż B, a 1 powinien pojawić się na wyjściu niezależnie od B.
Hood
@db Podziel nna czynniki pierwsze. Jeśli wszystkie te liczby pierwsze są większe niż B, n jest Brówne.
Addison Crump,
@AddisonCrump Więc na przykład, skoro liczby pierwsze dla 35 to 5, a 7, 35 to 4-szorstka? Czy to jakaś uznana wspólna terminologia? Nigdy wcześniej o tym nie słyszałem. Nadal nie podam przykładów, zwłaszcza nie ostatniego. 14 liczb, ale co to jest 10?
db

Odpowiedzi:

5

Haskell , 53 44 bajty

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

Wypróbuj online!

Dzięki H.PWiz za -9 bajtów!

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
źródło
Można to nieco uprościć
H.PWiz
@ H.PWiz Racja, jakoś myślałem tylko o przyjęciu części (>b)do zrozumienia (co nie działa), ale nie na odwrót. Dzięki!
Laikoni
5

Python 3 , 80 , 75 bajtów

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

Wypróbuj online!

Dzięki shooqie za oszczędność 5 bajtów.

Zakłada się, że k'th numer B-szorstki nigdy nie przekroczy bk , czego nie wiem jak udowodnić, ale wydaje się, że jest to dość bezpieczne założenie (i nie mogę znaleźć żadnych kontrprzykładów).

Alternatywne rozwiązanie:

Python 2 , 78 bajtów

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

Wypróbuj online!

To rozwiązanie nie stanowi powyższego rozwiązania. I jest znacznie bardziej wydajny.

James
źródło
3
Hmm, to założenie jest prawdopodobnie możliwe do zweryfikowania, ale mimo to interesujący problem. Zlecę nagrodę za dowód.
Addison Crump
1
Dlaczego nie 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 To brzmi fajnie. Zobacz również math.stackexchange.com/questions/2983364/...
anuś
@Anush Niestety mój dowód nie zadziałał, ponieważ popełniłem błąd
Black Owl Kai
3

Perl 6 , 35 32 bajtów

-3 bajty dzięki nwellnof!

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

Wypróbuj online!

Anonimowy blok kodu, który przyjmuje dwie liczby całkowite i zwraca listę liczb całkowitych.

Wyjaśnienie

{                              }  # 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
źródło
Co ma allzrobić?
Addison Crump
1
@AddisonCrump allsprawdza, czy wszystkie elementy na liście są zgodne z prawdą. Niedługo
Jo King
@nwellnhof Wow! Do tego właśnie są przydatne Połączenia!
Jo King
Tak, pamiętaj, że możesz także użyć [&]zamiast all.
nwellnhof,
@AddisonCrump Chyba allnie jest już używany w ten sposób, dlatego powinienem zaktualizować swoją odpowiedź. alltworzy połączenie wartości w zakresie 2..b, a wszelkie operacje wykonywane na połączeniu są wykonywane jednocześnie na wszystkich wartościach. Gdy jest oceniany w kontekście logicznym przez grep, to zapada się, czy wszystkie wartości w skrzyżowaniu są zgodne z prawdą, tj. Niezerowe
Jo King
3

Łuska , 9 8 bajtów

↑foΛ>⁰pN

Wypróbuj online!

Trwa b jako pierwszy i k jako drugie wejście.

↑         -- 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
źródło
2

Węgiel drzewny , 33 bajty

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

NθNη

Wejście Bi k.

≔⁰ζ

Ustaw zna 0.

W‹Lυη«

Powtarzaj, aż otrzymamy kwartości.

≦⊕ζ

Przyrost z.

¿¬Φθ∧κ¬﹪ζ⊕κ

Podziel zprzez wszystkie liczby od 2do Bi sprawdź, czy reszta jest równa zero.

⊞υζ»

Jeśli nie, naciśnij przycisk zdo wstępnie zdefiniowanej pustej listy.

Iυ

Rzuć listę na ciąg i niejawnie ją wyślij.

Neil
źródło
2

JavaScript (ES6), 68 bajtów

Pobiera dane wejściowe jako (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

Wypróbuj online!

Skomentował

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
źródło
1

Galaretka , 10 bajtów

1µg³!¤Ịµ⁴#

Wypróbuj online!

Jak to działa

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
źródło
1

APL (NARS), 52 znaki, 104 bajty

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

Powyżej wydaje się, że wiersze po 'r ← afw; i' mają nazwy 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
źródło
1

05AB1E , 9 bajtów

∞ʒÒ¹›P}²£

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

          # 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
źródło