É um primo fraco?
Um primo é fraco se o outro primo mais próximo for menor que ele. Se houver um empate, o prime não é fraco.
Por exemplo, 73 é um primo fraco porque 71 é primo, mas 75 é composto.
Escreva um código de computador que, quando fornecido um primo maior que 2, como entrada, determinará se é um primo fraco. Esse é um problema de decisão padrão , portanto, você deve gerar dois valores exclusivos para cada um dos dois casos (por exemplo, weake not weak).
Isso é código-golfe, então as regras padrão para a tag se aplicam.
Aqui estão os primeiros 47 números primos fracos:
Aqui está o OEIS para números primos fracos (deve retornar weak) OEIS A051635
Aqui está o OEIS para números primos equilibrados (deve retornar not weak) OEIS A006562
Aqui está o OEIS para números primos fortes (deve retornar not weak) OEIS A051634
not weakou strong?
@CalculatorFeline não fraco é diferente do forte
Como bônus, mudar >para =ou procurar <por números primos equilibrados e fortes, respectivamente.
Isso deveria ser >, não?
Oh uau, isso é inteligente ...
Eu também trabalhei dessa maneira também. Bom trabalho!
Isto é tão inteligente ...
O NextPrimebuilt-in pode ser (ab?) Usado para calcular o primo anterior, alimentando-o com um argumento negativo.
Retorna 1para fraco e 0para não fraco ou equilibrado (retorna 1para uma entrada de 2)
Ninja'd me com uma solução complexa ...
— Erik the Outgolfer 08/07/17
Foi uma fração de segundo!
Não, não foi, foram 9 segundos completos de iirc. Não, 10 segundos.
Por isso, foi (olhando para os tempos) aconteceu como eu submeti aqui :)
Bem, parece que você acabou de golfed mais rápido do que eu ... (que é bastante uma viagem para ir primeiro a partir IIṠ⁼1para II>0a I<\) ... o seu é muito embora diferente. Parece que você pensa diferente de mim ... EDIT: Pietu1998 retornou!
PHP , 69 bytes
imprime um para prime fraco e nada para prime não fraco
Oitava, 93 84 bytes
Obrigado a @LuisMendo e @ rahnema1 por salvar bytes!
Você não pode usar i-=1etc? Além disso, endnão é necessário na função; você pode movê-lo para o rodapé
Máximos, 42 bytes
Isso produz, 1se fraco, 0caso contrário.
∇f N declara uma função que aceita um argumento.
(~R∊R∘.×R)/R←1↓⍳N×2fornece uma lista de todos os números primos de 2 a duas vezes o argumento. Estou assumindo que o próximo primo é menos que o dobro do original. Se isso não for verdade, N*2fornece N ao quadrado e leva o mesmo número de bytes (espero que seja grande o suficiente para exceder o próximo primo). (Veja a explicação da Wikipedia sobre como funciona a descoberta principal)
X←(R←(...))⍳Natribui essa lista ao vetor R(substituindo seu conteúdo anterior), localiza o índice do primo original Nnessa lista e atribui esse índice aX .
|R[X-1]-Ncalcula a diferença entre o primo anterior (porque Rcontém os primos, o X-1elemento th é o primo anterior N) eN e, em seguida, assume o valor absoluto (o APL opera da direita para a esquerda).
|R[X+1]-N faz o mesmo, mas para o próximo prime.
(|R[X-1]-N)<|R[X+1]-Nimprime 1 se o prime anterior estiver mais próximo do original que o próximo prime e 0 em caso contrário. Parênteses são necessários para precedência.
∇ finaliza a função.
Usa o algoritmo de Pietu1998.
Perl 6 , 41 bytes
$_é o argumento para a função A função de mapeamento -> \n { $_ + n, * + n ... &is-prime }pega um número ne retorna uma sequência de números$_ + n, $_ + 2*n, ... que termina quando atinge um número primo. Mapear esta função sobre os dois números 1e -1produz uma sequência de duas seqüências; o primeiro começa com $_ + 1e termina com o primeiro número primo maior que $_e o segundo começa com $_ - 1e termina com o primeiro número primo menor que $_. [>]reduz essa lista de dois elementos com o operador maior que, retornando true se a primeira sequência for maior (ou seja, mais longa) que a segunda.
Como o python não possui uma função embutida é primordial, podemos usar o teorema de Wilson para obter um bom verificador primário curto. O teorema de Wilson afirma que um número é primo se e somente se (n-1)! é congruente a -1 mod (n). Portanto, a função retornará 1 se o número for primo e 0 se não for. Depois disso, a função f determinará se o próximo primo desse número ocorrerá primeiro quando incrementado para baixo, em vez de incrementado para cima. Se nenhum dos números incrementados for primo, é apenas chamado recursivamente novamente.
Alguns exemplos de E / S
Python 2 , 122 108 103 94 92 bytes
Usa a idéia de Pietu ... e depois salvou 28 bytes ao jogar iteradores mais curtos da lista principal; mais 2 substituindo -3*n>0por >3*n(d'oh!)
Regex (a maioria dos sabores), 47 bytes
Recebe entrada em unário. Produz uma correspondência para números primos fracos, nenhuma correspondência para números primos não fracos. Trabalha em ECMAScript, Perl, PCRE, Python, Ruby.
Seja N a entrada, A o primo mais próximo <N e B o primo mais próximo> N. A principal dificuldade de uma abordagem de expressão regular para esse desafio é que não podemos representar números maiores que a entrada, como B. Em vez disso, Encontre o menor b de modo que 2b + 1 seja primo e 2b + 1> N, o que garante 2b + 1 = B.
Então, observe que não precisamos encontrar A. Contanto que qualquer primo <N esteja mais próximo de N que B, N é um primo fraco.
Oitava, 53 bytes
Economize 8 bytes com base no truque de Jörg Hülsermann "imprima nada em um caso". Não é necessário ?"Y":"N"depoisone<two
Eu estou usando uma função de geração principal (linha superior) tirada desta antiga resposta de troca de pilhas.