Продукты последовательных простых чисел


11

На момент подачи в песочницу у меня была репутация 17017, которую вы все сможете разложить на 7 × 11 × 13 × 17, произведение 4 последовательных простых чисел.

Пожалуйста, напишите функцию или программу для вывода всех произведений из двух или более последовательных простых чисел вплоть до целого числа ввода n. Например, если n=143вы должны вывести 6, 15, 30, 35, 77, 105, 143(или эквивалентный выходной формат).

Нормальные ограничения на ввод / вывод и лазейки применяются.

Это , поэтому выигрывает самая короткая программа.



2
Должен ли вывод сортироваться или нет?
Fatalize

@Fatalize Я имел в виду, что он должен быть отсортирован, но я вижу, что не указал это достаточно хорошо, и уже есть несколько ответов, которые не выводят отсортированный список.
Нил

Ответы:


6

Желе , 14 10 байт

(без сомнения, здесь есть игра в гольф! - да ...)
-4 байта благодаря @Dennis - замените проверку на большее, чем n, используя диапазон

ÆRẆP€ḟÆRfR

Обратите внимание - это крайне неэффективно, а результаты не отсортированы.

Проверьте это в TryItOnline

Как?

ÆRẆP€ḟÆRfR - main link takes an argument, n
ÆR    ÆR   - primes up to n
  Ẇ        - all sublists
   P€      - product for each
     ḟ     - filter out the primes (since the sublists include those of lnegth 1)
        fR - filter out any not in range [1,N]
             (yep, it's calculating all products of primes up to n - gross)

2
Вам не нужно µи ³; >Ðḟработает просто отлично само по себе. fRеще короче.
Деннис

@ Денис - Я жду твоего превосходного метода. Благодаря!
Джонатан Аллан

4

MATL , 25 20 байт

Zq&Xf"@gnq?2MpG>~?6M

Подход похож на ответ Джонатана Аллана .

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


Старая версия, 25 байт

:YF!"@2<@sq0@0hhdz2=v?X@D

Это позволяет получить показатели разложения простого множителя для всех чисел от 1входа. Для каждого он проверяет:

  1. Если все показатели меньше 2.
  2. Если сумма всех показателей больше 1.
  3. Массив показателей расширяется дополнительным нулем на каждом конце. Последовательные различия расширенного массива вычисляются. Должно быть ровно 2 отличных от нуля различия.

Если три условия выполнены, отображается номер. Результаты в порядке возрастания.


4

Javascript (ES6), 105 104 байта

n=>{for(i=1,P=[];i++<n;P[P.every(v=>i%v)?i:n]=i);P.map(i=>P.map(j=>j>i&&(p*=j)<=n&&console.log(p),p=i))}

демонстрация

var f =
n=>{for(i=1,P=[];i++<n;P[P.every(v=>i%v)?i:n]=i);P.map(i=>P.map(j=>j>i&&(p*=j)<=n&&console.log(p),p=i))}

f(143)


2

05AB1E , 17 15 байт

L<ØŒ€PD¹>‹ÏDp_Ï

объяснение

L<Ø                 # get the first N primes, where N is the input
   Œ                # get all combinations of consecutive primes
    €P              # calculate the product of these sublists
      D¹>‹Ï         # keep only the products less than or equal to N
           Dp_Ï     # keep only those that aren't prime

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


1

Pyth, 18 байт

f}PTftlY.:fP_YSQ)S

Программа, которая принимает ввод целого числа в STDIN и печатает список целых чисел.

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

Как это работает

f}PTftlY.:fP_YSQ)S  Program. Input: Q
              SQ    Yield [1, 2, 3, ..., Q]
          fP_Y      Filter that by primality
        .:      )   Yield all sublists of that
    f               Filter the sublists by:
      lY             Length
     t               -1
                    removing sublists of length 1
f                S  Filter [1, 2, 3, ..., Q] (implicit input fill) by:
  PT                 Prime factorisation
 }                   is in the sublists
                    Implicitly print

1

Желе , 11 байт

ÆfÆCI=1Ȧµ€T

Не самый короткий ответ Jelly, но этот подход довольно эффективен, и результат сортируется.

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

Как это работает

ÆfÆCI=1Ȧµ€T  Main link. Argument: n

        µ€   Map the preceding chain over each k in [1, ..., n].
Æf             Compute all prime factors of k, with multiplicities.
  ÆC           Count the number of primes less than or equal to each prime factor.
               This maps the j-th to j.
    I          Increments; compute the forward differences of consecutive indices.
     =1        Compare each difference with 1.
       Ȧ       All; return 1 iff the array is non-empty and has no zeroes.
          T  Truth; yield all indices for which the chain returned 1.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.