Просте число у великій кількості


11

Враховуючи велику кількість (у базі 10), наприклад 1234567891011121314151617, знайдіть у ній прості "підпункти".
Просте "підрядне число" - це послідовна послідовність цифр (взяті з введення), яка представляє просте число (у базі 10).

  • Введення : число (або рядок, файл, або що завгодно).
  • Вихід : Усі основні підпункти чисел розділені якось (або в списку, у файлі, розділених комами рядків ...) Якщо результат порожній, ви можете прийняти будь-яку конвенцію, яка вам подобається (жорсткий кодовий рядок, порожня рядок, безглуздість, але програма не повинна крах.
  • Приклад
    1234 -> 2, 3, 23
    6542 -> 5, 2
    14 -> [.. порожній вихід]

Це код-гольф. Виграє найкоротша програма!
[редагувати]: додаткове правило, програма повинна бути пояснена! Не всі вільно володіють желе :)


3
Ласкаво просимо до PPCG!
Luis felipe De jesus Munoz


1
не визначено. Робіть все, що завгодно.
Regis Portalez

1
Порада: Це занадто рано, щоб прийняти відповідь; це може відвернути інших від розміщення рішень.
Кудлатий

2
@RegisPortalez Ласкаво просимо, і приємний виклик! Я виявив, що функція "прийняти" вже не використовується настільки багато на PPCG, як на інших сайтах у мережі. Ми схильні цінувати приємні відповіді будь-якою мовою.
ngm

Відповіді:


6

05AB1E (спадщина) , 3 байти

Œʒp

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

Підрядки вхідних даних, які є простими.


Це буде важко скоротити :)
Regis Portalez

Правильна мова для цього завдання
Джонатан Аллан

5
@mob Це залежить від кодування. У кодуванні 05AB1E ця відповідь становить 3 байти.
Денніс

2
Згідно з цим 34567 = 13 * 2659 є простим, здається, неправильним: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA
frosqh

2
@frosqh Це фактично помилка функції p (prime) у новому випуску 05AB1E : tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA Це вже виправлено в сховищі, але його не було натиснуто на TIO. Тим часом я переклав свою відповідь на застарілу версію.
Калдо

6

Perl 6 , 28 байт

{grep &is-prime,+«m:ex/.+/}

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

Прапор :ex("вичерпний") оператору відповідності mзмушує повертати кожну можливу відповідність .+(тобто кожну підрядку одного або декількох символів), навіть перекриваючись. Гіпероператор перетворює цей список Matchоб'єктів у числа, які потім фільтруються для простеження grep &is-prime.


Тут я збирався поїхати{+«m:ex/(.+)<?{$0.is-prime}>/}
Бред Гілберт b2gills

@ BradGilbertb2gills Я також спробував це! Я трохи розчарований, це виявилося довше.
Шон

Дякую за пояснення - завжди корисний динозаврам Perl 4, як я!
Toby Speight


5

Python 2 , 66 65 байт

P=k=1
n=input()
while~n+k:
 if`k`in`n`>0<P%k:print k
 P*=k*k;k+=1

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


Потрібно while k<=nабо, щоб коштувати 0 байт,while~n+k
Джонатан Аллан

@JonathanAllan дякую Спочатку я подумав, що саме число слід виключити з виводу, але, схоже, це не так.
ов

@JonathanAllan Чи можете ви пояснити, будь ласка, код із whileзаяви? Я раніше не бачив такого типу кодів. Також не бачили використання `` , що це робить?
tarit goswami

1
@taritgoswami while stmt:буде працювати до тих пір, поки stmtне буде значення, яке Python вважає правдою. Єдине хибне ціле число в Python 0. Тому код буде працювати як ~n+k != 0. ~є побітовим оператором доповнення і ~nеквівалентно -n - 1. ~n + k != 0<=> -n - 1 + k != 0<=> k != n + 1. Як ми приріст kна 1в кожній операції, k != n + 1в даному випадку , еквівалентний k <= n.
ов

1
@taritgoswami І `n`те саме, що і repr(n)в Python 2. (не працює в Python 3).
ов


3

Желе ,  5  4 байти

-1 спасибі Кевіну Крейсейну ( псевдонім для ÆP)

ẆḌẒƇ

Монадична посилання, що приймає список цифр *, що дає список простих цілих чисел.

* проходить "або рядок, файл, або що завгодно" - взяти ціле число, префікс коду з D

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

Як?

ẆḌẒƇ - Link: list of integers (digits)   e.g. [1,2,3,4]
Ẇ    - non-empty contiguous substrings        [[1],[2],[3],[4],[1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4]]
 Ḍ   - convert to decimal (vectorises)        [1,2,3,4,12,23,34,123,234,1234]
   Ƈ - filter keep if:
  Ẓ  -   is prime?                            [2,3,23]

ÆPможе бути, якщо я не помиляюся?
Кевін Кройсейсен

Так, це один з нових псевдонімів - дякую!
Джонатан Аллан

2

Java 8, 148 147 байт

n->{for(int l=n.length(),i=l,j;i-->0;)for(j=l;j>i;){long k=2,x=new Long(n.substring(i,j--));for(;k<x;x=x%k++<1?0:x);if(x>1)System.out.println(x);}}

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

Пояснення:

n->{                     // Method with String parameter and no return-type
  for(int l=n.length(),  //  Length of the input-String
          i=l,j;         //  Temp-integers
      i-->0;)            //  Loop `i` in the range [length, 0)
    for(j=l;j>i;){       //   Inner loop `j` in the range [length, 0)
      for(long k=2,      //    Set `k` to 2
               x=new Long(n.substring(i,j--)
                         //    Take the substring [`i`, `j`) from the input,
            );           //    convert it to a long, and set it as `x`
          k<x;           //    Inner loop as long as `k` is still smaller than `x`
        x=x%k++<1?       //     If `x` is divisible by `k`:
           0             //      Set `x` to 0
          :              //     Else:
           x);           //      Leave `x` unchanged
      if(x>1)            //    If `x` is now larger than 1 (a.k.a. If `x` is a prime):
        System.out.println(x);}}
                         //     Print `x` with a trailing newline to STDOUT


2

Bash + GNU Core Utils: 80 77 байт

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|grep -oP ': \K\d+$'
}

Це не може бути найкоротшим, але у мене виникають проблеми придумати щось краще. Потрібна допомога!

Дотримуючись лише POSIX, я отримав 82:

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|awk -F\  'NF<3{print$2}'
}

Чи може допомогти нарізка рядка Баша? Прикро діапазони брекетів розширюються перед параметрами ...
Toby Speight

@TobySpeight, для якого знадобиться дві петлі (одна для початку, одна для кінця), не кажучи вже про те, що ви не можете використовувати змінні всередині підстановки нарізки. Zsh це дозволяє, хоча! Основний шлях до короткості в моїй свідомості - використовувати Awk для генерації всіх підрядків.
markasoftware





0

Pyth, 8 байт

fP_TsM.:

Тестовий набір

Приймає введення як рядок, виводить список цілих чисел. Також можна прийняти введення як int додавання `в кінці додаткового байта.

Пояснення:
fP_TsM.:  | Full code
fP_TsM.:Q |  with implicit variables added
          | Print (implicit)
      .:Q |  list of all substrings of the input
    sM    |   converted to integers
fP_T      |    filtered for prime numbers

І `просто перетворюється intна str.


0

Мова Вольфрама (Mathematica) , 40 байт

Select[PrimeQ@*FromDigits]@*Subsequences

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

Введення та вихід - це списки цифр. У разі відсутності простих підпунктів порожній список {}повертається.

Використання @*для Compositionфункцій. Subsequencesдає список усіх підрядів вхідних даних і Select[PrimeQ@*FromDigits]є операторною формою, Selectяка повертає список усіх елементів, для яких PrimeQ@*FromDigitsповертається True.


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