Аддитивні Прими серед перших х Прим


16

Визначення адитивних примов:

  • Числа, які мають рівно 2 дільники, називаються простими числами.

  • Числа, які є простими, а їхня цифра також є простим числом, називаються адитивними праймами


Завдання:

З огляду на ціле число x, обчисліть усі присадочні прості серед перших xпростих чисел, при цьому 2вони будуть розглядатися як першим простим, так і адитивним простим числом. Цифри представлені в базі 10.

Правила:

  • Вихід складається з усіх адитивних праймерів серед перших xпрайменів
  • 0 < x < 151, для цього завдання, з метою функціональності
  • Оскільки присадкові праймери - це цілі числа, десяткові знаки не дозволені (наприклад: слід виводити 2, не 2.0), і вони не повинні відображатися як дріб.

Приклади:

10 -> 2 3 5 7 11 23 29

Пояснення:

Перші 10 простих чисел є 2 3 5 7 11 13 17 19 23 29і 2 3 5 7 11 23 29мають лише свою суму розрядних простих чисел, тобто відповідно 2,3,5,7,2,5,11, тому вони є додатковими простими числами

На підставі пояснень з example 1інших тестових випадків можуть бути:

2 -> 2 3

25 -> 2 3 5 7 11 23 29 41 43 47 61 67 83 89

7 -> 2 3 5 7 11

Табло:


ПРИМІТКА. Будь ласка, прочитайте нещодавно відредаговане правило 1, воно незначно змінює вихідний формат


Ваш код повинен бути якомога коротшим, оскільки це , тому найкоротша відповідь у байтах виграє. Удачі!


Це чудово. Я рекомендую почекати близько 24 годин, тому що кожного разу, коли ви приймаєте відповідь, вони отримують 15 повторень, але вони втрачають її, коли ви не приймаєте. Іноді катастрофічно їздити на гірках і постійно втрачати та отримувати реп.
Rɪᴋᴇʀ

Відповіді:


8

Пайк, 9 7 байт

~p>#Yss

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

Єдиний байт is_primeбув натиснений лише 3 години тому. Github фіксують .

~p      -    All the prime numbers
  >     -   first input of them
   #Yss -  filter(^)
    Y   -     digits(^)
     s  -    sum(^)
      s -   is_prime(^)

3
Ви просто редагували свою мову, щоб відповідати цьому виклику? : D
Джуріс

значить ... sозначає is_prime за номерами, а сума за списками?
Conor O'Brien

@ ConorO'Brien так, я перевантажую його для списків і цілих чисел
Blue

@ Džuris ні, я мав на увазі деякий час, тому що у мене не було жодного вузла, щоб робити основну перевірку, лише розподіляючи фактори на праймери та дільники. Перш ніж мені довелося б зробити, _Pщо в цьому випадку на 1 байт довше
Blue

1
новий претендент на "наймолодший мовний фільм, щоб виграти виклик"? під дротом на ~ 2 години?
Спарр

8

Python 2, 124 118 байт

За допомогою Рікера:

n,f,P=input(),filter,lambda n:all(n%i for i in range(2,n))
f(lambda x:P(sum(map(int,`x`)))&P(x),f(P,range(2,n*n))[:n])

Оригінал:

n,o,c,P=input(),0,2,lambda n:all(n%i for i in range(2,n))
while o<n:
 o+=P(c)
 if P(sum(map(int,`c`)))and P(c):print c
 c+=1

Перевірка первинності в Python - це не цікаво.


Я (прочитав: отримав Конор, щоб написати класний J-код для мене) перевірив це з 9n, не працює. : / n ** 2 працює, але вартістю 1 байт.
Rɪᴋᴇʀ

Спробуйте n*nдляn**2
Conor O'Brien

8

Рода , 136 135 байт

f n{P=[2]S=[2]seq 3,863|{|i|{P|{P+=i;s=0;((""..i)/"")|parseInteger _|s+=_;S+=i if[s in P and not(i in S)]}if{|p|[i%p>0]}_}if[#P<n]}_;S}

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

Це функція, яка повертає запитувані добавки.

Використання: main { f(25) | print ap for ap }Код використовує версію 0,12, яка знаходиться у відділенні roda-0.12.

Безголівки:

function f(n) {
    primes := [2]
    ultraprimes := [2]
    seq(3, 863) | for i do
        break if [ #primes = n ]
        if [ i%p != 0 ] for p in primes do
            primes += i
            sum := 0
            ((""..i)/"") | parseInteger _ | sum += digit for digit
            ultraprimes += i if [ sum in primes and not (i in ultraprimes) ]
        done
    done
    ultraprimes
}

1
Гарна мова! Ви зробили це дуже давно, як це виглядає? 10/10, виглядає досить круто.
Rɪᴋᴇʀ

Охайна мова! Як ви запускаєте програму?
Kritixi Lithos

Якраз збирався запитати те саме. Хоча я переглянув документацію, я взагалі не можу запустити або скласти джерело. Який ваш підхід?
Містер Xcoder

@KritixiLithos @ Xcoder123 Для цього потрібні Java 8 та Gradle. Я використовую у цій відповіді версію 0,12 (у власній галузі). Репозиторій повинен бути клонований рекурсивно. Для виготовлення баночки, що працює, запустіть gradle fatJar. Чи виникають помилки під час компіляції?
fergusq

@fergusq Running gradle fatJar, здається, не створює для мене баночки
Kritixi Lithos

5

Perl 6 , 53 байти

{grep *.comb.sum.is-prime,grep(*.is-prime,0..*)[^$_]}

Спробуй це

Розширено:

{
  grep
    *.comb.sum.is-prime, # find the ultra primes from:
    grep(
      *.is-prime,        # find the primes
      0..*               # from all integers
    )[ ^$_ ]             # grab only the first x primes
}

Якщо цей виклик було змінено так, що ви взяли перші x ультраприміри, це може бути скорочено до справедливого

{grep({($_&.comb.sum).is-prime},0..*)[^$_]}

5

Python 2 , 96 87 байт

p=-input(),0;m=k=1
while sum(p):
 m*=k*k;k+=1;p+=m%k,
 if m%k*p[int(`k`,36)%35]:print k

Дякуємо @xnor за те, що ти граєш на 9 байт!

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



Розрахункова сума може бути коротшою, як є int(`k`,36)%35. Усі входи будуть досить малі, щоб цього було достатньо.
xnor


Оце Так! Я не впевнений, як я думав про булевий дикт, але не булевий кортеж (задній простір 20/20), але sum(p)і int(`k`,36)%35чимось іншим ... Дякую!
Денніс

5

Математика, 61 47 байт

Prime@Range@#~Select~PrimeQ@*Tr@*IntegerDigits&

Не зовсім знайомі зі скороченими синтаксисами Mathematica - що це @*? *Чи не виглядає , як ніби це в потрібному місці , щоб бути множення?
numbermaniac

3
@numbermaniac - це функціональний склад. f@*gє по суті f@g@##&.
Мартін Ендер

4

Желе , 10 байт

ÆNDS$€ĖÆPM

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

Як?

Трохи інший підхід ...

ÆNDS$€ĖÆPM - Main link: n (>0)           e.g. 10
ÆN         - nth prime number                 29
     €     - for each in range(1,nth prime)   [1,    2,    3,   ..., 27,    28,     29]
    $      - last two links as a monad
  D        -     decimal digit list          [[1],  [2],  [3],  ...,[2,7], [2,8],  [2,9]]
   S       -     sum                          [1,    2,    3,   ..., 9,     10,     11]
      Ė    - enumerate                       [[1,1],[2,2],[3,3],...,[9,27],[10,28],[11,29]]
       ÆP  - is prime? (vectorises)          [[0,0],[1,1],[1,1],...,[0,1], [0,0],  [1,1]]
         M - indices of maximal elements     [       2,    3,   ...,                29]

3
Гарне використання Ė.
Денніс


3

Желе , 11 байт

ÆN€DS$ÆP$Ðf

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

Пояснення:

MainN € DS $ ÆP $ Ðf Головна посилання (арг: z)
ÆN € Створення перших z простих ліній.
   DS $ Візьміть цифрову суму.
      CheckP Перевірте, чи це прем'єр.
        $ Приєднайтесь до двох останніх посилань і складіть монаду.
         Ðf Зберігайте лише ті елементи, які відповідають наведеному вище критерію.

Я переміг.


2

MATL, 15 13 байт

2 байти збережено завдяки @Luis

:Yq"@V!UsZp?@

Спробуйте в MATL Online

Пояснення

        % Implicitly grab input as a number (N)
:       % Create an array [1...N]
Yq      % Get the k-th prime for each element k in that array
"       % For each element in this list
  @     % Get the current element
  V!U   % Break it into digits
  s     % Sum up the digits
  Zp    % Determine if this is a prime number
  ?@    % If it is, push the value to the stack
        % Implicit end of for loop and implicit display of the stack

@LuisMendo Ах! Я знав, що є якийсь спосіб скоротити цю першу частину. Спасибі
Suever


1

Ом , 10 байт (CP437)

@▓_π;░_}Σp

Це було б набагато коротше, якби у мене була векторизація або компонент для перших N прайменів, але, на жаль, я не робив цього завдання (але я зараз !).

Пояснення:

@▓_π;░_}Σp    Main wire, arguments: a

@▓  ;         Map...over the range (1..n)
  _π            nth prime
     ░        Select from ToS where...
      _}Σ       The sum of all digits
         p      is prime

1

PowerShell , 120 байт

for($n=$args[0];$n){for(;'1'*++$i-notmatch($s='^(?!(..+)\1+$)..')){}if('1'*([char[]]"$i"-join'+'|iex)-match$s){$i};$n--}

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

Перша перевірка в PowerShell смокче.

Зовнішня forпетля йде від входу $nдо 0. У внутрішньому циклі ми використовуємо простий генератор на $i, а потім перевірити ifцифру-суму ( -join'+'|iex) також є простим. Якщо так, ми ставимо $iна конвеєр. У будь-якому випадку ми декрементуємо, $n--і зовнішня forпетля продовжується. Отримані $is збираються з конвеєра і неявне Write-Outputвідбувається під час завершення програми.



0

MATL , 13 байт

:YqtFYA!XsZp)

Спробуйте в MATL Online!

Пояснення

:      % Range [1 2 ... n], where n is implicit input
Yq     % Array of first n prime numbers
t      % Duplicate
FYA    % Convert to decimal digits. Gives a matrix, where each original 
       % number corresponds to a row. Left-pads with zeros if needed
!Xs    % Sum of rows
Zp     % Is prime? (element-wise)
)      % Use as logical index into the array of the first n prime numbers
       % Implicitly display
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.