Утворіть кілька приблизних чисел


15

Фон

Число nможна охарактеризувати як Bповне, якщо всі найпростіші коефіцієнти nсуворо перевищують B.

Змагання

Дано два натуральних числа Bі kвиведіть k Bпервісні числа.

Приклади

Дозвольте f(B, k)бути функцією, яка повертає набір, що містить k Bпервісні числа.

> 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
Чи можете ви детальніше зупинитися на виклику? Я цього не розумію. Може поясніть приклади?
дб

Я не розумію, чому ви включаєте 1 у всі свої відповіді, коли він ніколи не перевищує B?
kamoroso94

1
1 не має простих факторів, тому кожен простий коефіцієнт 1 більший за B, а 1 повинен з’являтися на виході незалежно від B.
Hood

@db Розділити nна праймери . Якщо всіх цих простих чисел більше B, то n B-різно.
Аддісон Кримп

@AddisonCrump Так, наприклад, оскільки праймери для 35 складають 5 і 7, 35 - 4-грубі? Це визнана загальна термінологія? Ніколи не чув про це раніше. Я все ще не під цим прикладами, особливо не останній. 14 чисел, але що таке 10 ??
дб

Відповіді:


5

Haskell , 53 44 байти

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

Спробуйте в Інтернеті!

Завдяки H.PWiz за -9 байт!

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.

Це можна дещо спростити
H.PWiz

@ H.PWiz Правильно, я якось думав лише про те, щоб взяти (>b)-частку всередині розуміння (що не працює), але не навпаки. Спасибі!
Лайконі

5

Пітон 3 , 80 , 75 байт

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

Спробуйте в Інтернеті!

Завдяки shooqie за збереження 5 байт.

Це передбачає, що k'th B-приблизне число ніколи не перевищує Бк , що я не знаю, як довести, але здається досить безпечним припущенням (і я не можу знайти жодних контрприкладів).

Альтернативне рішення:

Python 2 , 78 байт

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

Спробуйте в Інтернеті!

Це рішення не робить вищезазначене рішення. І набагато ефективніше.


3
Гм, це припущення, ймовірно, можна перевірити, але все ж цікава проблема. Я буду щедро за доказ.
Аддісон Кримп

1
Чому ні 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 Це звучить круто. Дивіться також math.stackexchange.com/questions/2983364 / ...
Ануш

@Anush На жаль, мої докази не спрацювали, тому що я помилився
Black Owl Kai


3

Perl 6 , 35 32 байти

-3 байти завдяки nwellnof!

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

Спробуйте в Інтернеті!

Блок анонімного коду, який приймає два цілих числа і повертає список цілих чисел.

Пояснення

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

Що робить all?
Аддісон Кримп

1
@AddisonCrump allперевіряє, чи всі елементи в списку є правдивими. Я незабаром додаю пояснення до всього
Джо Кінг

@nwellnhof Вау! Тож для цього корисні стики!
Джо Кінг

Так, зауважте, що ви можете також використовувати [&]замість цього all.
nwellnhof

@AddisonCrump Я думаю, allбільше не використовується таким чином, тому я повинен оновити свою відповідь. allстворює З'єднання значень у діапазоні 2..b, і будь-які операції, виконані на З'єднанні, виконуються на всіх значеннях одночасно. Коли це оцінюється в булевому контексті за допомогою grep, це руйнується на те, чи всі значення в З'єднанні є правдоподібними, тобто не нульовими
Jo King


2

Вугілля деревне , 33 байти

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

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Пояснення:

NθNη

Вхід Bі k.

≔⁰ζ

Встановіть z0.

W‹Lυη«

Повторюйте, поки ми не отримаємо kзначення.

≦⊕ζ

Приріст z.

¿¬Φθ∧κ¬﹪ζ⊕κ

Розділити zвсе числа від 2до Bі подивитися , якщо залишок дорівнює нуль.

⊞υζ»

Якщо ні, то натисніть zна попередньо визначений порожній список.

Iυ

Перекиньте список на рядок і неявно виведіть його.


2

JavaScript (ES6), 68 байт

Вводиться як " (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

Спробуйте в Інтернеті!

Прокоментував

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

APL (NARS), 52 символи, 104 байти

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

Зверху здається, що рядки після 'r ← afw; i' мають імена 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│
└~────────────────────────────────────────┘

1

05AB1E , 9 байт

∞ʒÒ¹›P}²£

Спробуйте в Інтернеті або перевірте всі тестові випадки .

Пояснення:

          # 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.