Генерация некоторых грубых чисел

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.
Капот
@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.
Laikoni
источник
Это может быть несколько упрощено
H.PWiz
@ H.PWiz Правильно, почему-то я думал только о том, чтобы взять (>b)-часть внутри понимания (что не работает), а не наоборот. Благодарность!
Laikoni
5

Python 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-ое 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

Попробуйте онлайн!

Это решение не делает вышеуказанное решение. И гораздо эффективнее.

DJMcMayhem
источник
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
@Anush К сожалению, мое доказательство не сработало, потому что я допустил ошибку
Black Owl Кай
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, это сводится к тому, являются ли все значения в Соединении правдивыми, то есть ненулевыми
Джо Кинг,
2

Древесный уголь , 33 байта

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

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

NθNη

Ввод Bи k.

≔⁰ζ

Установите zна 0.

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[]
Arnauld
источник
1

Желе , 10 байт

1µg³!¤Ịµ⁴#

Попробуйте онлайн!

Как это устроено

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 символа, 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│
└~────────────────────────────────────────┘
RosLuP
источник
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
Кевин Круйссен
источник