Generieren Sie einige grobe Zahlen


15

Hintergrund

Eine Zahl nkann als B-grob bezeichnet werden, wenn alle Primfaktoren von nstreng überschreiten B.

Die Herausforderung

Geben Sie bei zwei positiven ganzen Zahlen Bund kdie ersten k Brauen Zahlen aus.

Beispiele

Sei f(B, k)eine Funktion, die die Menge mit den ersten k Bgroben Zahlen zurückgibt.

> 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
Können Sie die Herausforderung erläutern? Ich verstehe es nicht Vielleicht die Beispiele erklären?
db

Ich verstehe nicht, warum Sie 1 in alle Ihre Antworten aufnehmen, wenn es nie größer ist als B?
Kamoroso94

1
1 hat keine Primfaktoren, daher ist jeder Primfaktor von 1 größer als B und 1 sollte unabhängig von B in der Ausgabe erscheinen.
Hood

@db nIn Primzahlen zerlegen . Wenn alle diese Primzahlen größer als sind B, ist n B-rough.
Addison Crump

@AddisonCrump Da also zum Beispiel die Primzahlen für 35 5 und 7 sind, ist 35 4-grob? Ist dies eine allgemein anerkannte Terminologie? Noch nie davon gehört. Ich verstehe mich immer noch nicht auf die Beispiele, besonders nicht auf das letzte. 14 Zahlen, aber was ist 10 ??
db

Antworten:


5

Haskell , 53 44 Bytes

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

Probieren Sie es online!

Danke an H.PWiz für -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.

Dies kann vereinfacht etwas
H.PWiz

@ H.PWiz Richtig, irgendwie habe ich nur darüber nachgedacht, den Teil (>b)innerhalb des Verständnisses zu nehmen (was nicht funktioniert), aber nicht umgekehrt. Vielen Dank!
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]

Probieren Sie es online!

Danke an shooqie für das Speichern von 5 Bytes.

Dies setzt voraus, dass die k-te B-raue Zahl niemals Bk überschreitet , was ich nicht beweisen kann, aber als ziemlich sichere Annahme erscheint (und ich kann keine Gegenbeispiele finden).

Alternative Lösung:

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

Probieren Sie es online!

Diese Lösung ergibt nicht die obige Lösung. Und ist viel effizienter.


3
Hmm, diese Annahme ist wahrscheinlich überprüfbar, aber dennoch ein interessantes Problem. Ich werde für einen Beweis belohnen.
Addison Crump

1
Warum nicht 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 Das hört sich cool an. Siehe auch math.stackexchange.com/questions/2983364/…
Anush

@Anush Leider hat mein Beweis nicht funktioniert, weil ich einen Fehler gemacht habe
Black Owl Kai


3

Perl 6 , 35 32 Bytes

-3 Bytes dank nwellnof!

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

Probieren Sie es online!

Ein anonymer Codeblock, der zwei Ganzzahlen akzeptiert und eine Liste von Ganzzahlen zurückgibt.

Erläuterung

{                              }  # 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

Was macht alldas?
Addison Crump

1
@AddisonCrump allprüft, ob alle Elemente in der Liste wahr sind. Ich werde in Kürze eine Erklärung für das Ganze hinzufügen
Jo King,

@nwellnhof Wow! Genau dafür sind Junctions nützlich!
Jo King

Ja, beachten Sie, dass Sie [&]anstelle von auch verwenden könnten all.
Nwellnhof

@AddisonCrump Ich schätze, es allwird nicht mehr so ​​verwendet, also sollte ich meine Antwort aktualisieren. allErstellt eine Kreuzung der Werte im Bereich 2..b, und alle an der Kreuzung ausgeführten Vorgänge werden für alle Werte gleichzeitig ausgeführt. Wenn es im Booleschen Kontext von ausgewertet wird grep, kollabiert dies zu der Frage, ob alle Werte in der Junction wahr sind, dh nicht Null
Jo King,

3

Schale , 9 8 Bytes

↑foΛ>⁰pN

Probieren Sie es online!

Nimmt B als erstes und k als zweiter Eingang.

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

Holzkohle , 33 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:

NθNη

Eingabe Bund k.

≔⁰ζ

Auf z0 setzen.

W‹Lυη«

Wiederholen, bis wir kWerte haben.

≦⊕ζ

Inkrementieren z.

¿¬Φθ∧κ¬﹪ζ⊕κ

Teilen Sie zdurch alle Zahlen von 2bis Bund prüfen Sie, ob der Rest Null ist.

⊞υζ»

Wenn nicht, drücken Sie zauf die vordefinierte leere Liste.

Iυ

Wandeln Sie die Liste in eine Zeichenfolge um und geben Sie sie implizit aus.


2

JavaScript (ES6), 68 Byte

Übernimmt die Eingabe als (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

Probieren Sie es online!

Kommentiert

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

Gelee , 10 Bytes

1µg³!¤Ịµ⁴#

Probieren Sie es online!

Wie es funktioniert

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 Zeichen, 104 Byte

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

Oben scheinen die Zeilen nach 'r ← afw; i' die Namen 1 2 3 zu haben; 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│
└~────────────────────────────────────────┘

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.