Uma das minhas definições favoritas dos números primos é a seguinte:
2 é o menor primo.
Números maiores que 2 são primos se não forem divisíveis por um primo menor.
No entanto, essa definição parece arbitrária, por que 2? Por que não outro número? Bem, vamos tentar alguns outros números definirão n-prime tal que
n é o menor n-prime.
Números maiores que n são n-prime se não forem divisíveis por um n-prime menor.
Tarefa
A tarefa aqui é escrever um programa que aceite duas entradas, um número inteiro positivo n e um número inteiro positivo a . Ele então decidirá se a é n -prime. Seu programa deve gerar dois valores distintos, um para "sim, é n-prime" e outro para "não, não é n-prime".
Esta é uma questão de código-golfe, para que as respostas sejam pontuadas em bytes, com menos bytes sendo melhores.
Testes
Aqui estão as listas dos 31 primeiros números primos para n = 2 en = 12 (1 é o único número 1)
n=2: [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=3: [3,4,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=4: [4,5,6,7,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=5: [5,6,7,8,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=6: [6,7,8,9,10,11,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=7: [7,8,9,10,11,12,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=8: [8,9,10,11,12,13,14,15,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=9: [9,10,11,12,13,14,15,16,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=10: [10,11,12,13,14,15,16,17,18,19,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=11: [11,12,13,14,15,16,17,18,19,20,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=12: [12,13,14,15,16,17,18,19,20,21,22,23,25,27,29,31,33,35,37,41,43,47,49,53,55,59,61,67,71,73,77]
fonte
n=6, a=15
é o primeiro caso de teste interessante.Respostas:
Haskell , 45 bytes
Experimente online!
Eu defino uma boa função recursiva
(!)
:n!a
verifica se algum fator dea
, no intervalo[n,a-1]
, é umn-prime
. Então nega o resultado. Também garante quen>a
fonte
Python 2 ,
3937 bytesAgradecimentos a Halvard Hummel por -2 bytes.
Experimente online!
fonte
Python 3 , 45 bytes
Experimente online!
Como funciona
Isso leva dois inteiros como entrada, i e k . Primeiro verifica se k ≥ i . Em seguida, gera o intervalo [i, k) e, para cada número inteiro N nesse intervalo, verifica se N é coprime para k . Se ambas as condições forem cumpridas, então k é um i- prime.
fonte
&
vez deand
e em>=i
vez de>i-1
?>=i
ainda tem 4 bytes (devido ao espaço).&
não precisa do espaço.Casca ,
65 bytesExperimente online! ou veja resultados até 80 .
Agradecimentos a Leo por -1 byte.
Explicação
fonte
R ,
44bytes 37Experimente online!
-7 bytes graças a Giuseppe
Retorna
TRUE
sea
é igual an
ou (a==n|
)a
é maior quen
e (a>n&
) para cada número k den
atéa-1
,a
não é divisível igualmente por k (all(a%%n:(a-1))
)Retorna
FALSE
caso contráriofonte
J, 30 bytes
Experimente online!
Leva o valor inicial como o argumento certo e o valor a ser verificado no argumento esquerdo.
Eu errei originalmente e não levei em conta argumentos à esquerda menos do que o prime inicial. Estou um pouco infeliz com o comprimento da minha solução agora.
Explicação
Seja
x
o argumento da esquerda (o valor a ser verificado) ey
seja o argumento da direita (o primo inicial).Notas
O elemento na posição
x-y
é o resultado de testes de primalidade parax
(desde que adicionamosy
ao intervalo original).A multiplicação por
x >: y
garante que obtemos um valor de falsey (0
) porx
menos dey
.fonte
JavaScript (ES6),
333230 bytesRecebe entrada na sintaxe de currying
(n)(a)
. Retorna um booleano.Demo
Mostrar snippet de código
fonte
Haskell , 30 bytes
2 bytes salvos graças à idéia de H.PWiz, que foi emprestada da resposta de flawr
Experimente online!
Ok, já faz um tempo, e a única resposta de Haskell até agora é de 45 btyes, decidi postar minha própria resposta.
Explicação
Essa função verifica se o único número entre n e a pelo qual a é divisível é um próprio.
Agora, a definição menciona apenas n- vezes menor que a , então por que estamos verificando todos esses números extras? Não teremos problemas quando a é divisível por algum composto n maior que n ?
Não o faremos porque, se houver um n- compósito maior que n, ele deverá ser divisível por um n- prima menor por definição. Assim se divide a assim importa que o menor n -prime.
Se a for menor que n
[n..a]
será,[]
portanto, não será igual,[1]
causando falha na verificação.fonte
Geléia , 8 bytes
Experimente online!
fonte
Pip ,
231914 bytesO método mais curto é uma porta da resposta Python do Sr. Xcoder . Obtém o menor primo e o número para testar como argumentos da linha de comando. Experimente online!
fonte
C, 55 bytes
Experimente online!
53 bytes se vários valores de retorno verdadeiros são permitidos:
Experimente online!
fonte
dc ,
403437 bytesEu teria incluído um link do TIO, mas o TIO parece ter uma distribuição defeituosa de
dc
como isso funciona conforme o esperado no meu sistema, mas oQ
comando funciona erroneamente no TIO. Em vez disso, aqui está um link para umbash
campo de teste com uma versão funcionando corretamente dedc
:Demo It!
fonte
APL (Dyalog) , 24 bytes
Experimente online!
Quão?
⍳⍵
-1
paraa
o←⍺↓
-n
paraa
, salve emo
o|⍨⊂o
- modulo cada itemo
com cada item emo
0=
- verifique onde é igual0
(divide)+/¨
- soma o número de divisões1=
- se tivermos apenas um, o número será dividido apenas por sio/⍨
- então mantemos essas ocorrências⍵∊
- estáa
nessa matriz residual?fonte
JavaScript (Node.js) , 27 bytes
Experimente online!
Porta da minha resposta Python, tem entrada na sintaxe currying:
m(number)(first prime)
fonte
JavaScript ES5, 34 bytes
fonte
Adicione ++ , 20 bytes
Experimente online!
fonte