Surpreendentemente, não acho que tenhamos uma pergunta sobre código de golfe para determinar se um número é semiprime .
Um semiprime é um número natural que é o produto de dois números primos (não necessariamente distintos).
Simples o suficiente, mas um conceito notavelmente importante.
Dado um número inteiro positivo, determine se é um semiprime. Sua saída pode ser de qualquer forma, desde que ela seja igual para qualquer valor de verdade ou falsey. Você também pode assumir que sua entrada é razoavelmente pequena o suficiente para que o desempenho ou o excesso não sejam um problema.
Casos de teste:
input -> output
1 -> false
2 -> false
3 -> false
4 -> true
6 -> true
8 -> false
30 -> false (5 * 3 * 2), note it must be EXACTLY 2 (non-distinct) primes
49 -> true (7 * 7) still technically 2 primes
95 -> true
25195908475657893494027183240048398571429282126204032027777137836043662020707595556264018525880784406918290641249515082189298559149176184502808489120072844992687392807287776735971418347270261896375014971824691165077613379859095700097330459748808428401797429100642458691817195118746121515172654632282216869987549182422433637259085141865462043576798423387184774447920739934236584823824281198163815010674810451660377306056201619676256133844143603833904414952634432190114657544454178424020924616515723350778707749817125772467962926386356373289912154831438167899885040445364023527381951378636564391212010397122822120720357
-> true, and go call someone, you just cracked RSA-2048
Isso é código-golfe , então as regras padrão se aplicam!
Respostas:
Braquilog , 2 bytes
Basicamente, um exemplo da resposta de Fatalize ao desafio do número esfênico.
Experimente online!
Quão?
fonte
Ċ
é na verdade uma lista interna de duas variáveis; por ser uma linguagem declarativa, a saída é, por padrão, um teste de satisfação (por exemplo,ḋ
por si só resultariatrue.
em números inteiros não negativos).c6 eb
.Casca , 4 bytes
Olha, não sou Unicode!
Experimente online!
Quão?
fonte
Mathematica, 16 bytes
PrimeOmega
conta o número de fatores primos, contando a multiplicidade.fonte
SemiprimeQ
PrimeOmega
Pitão , 4 bytes
Conjunto de teste .
Quão?
fonte
Python 3 , 54 bytes
Experimente online!
O verson anterior teve alguns problemas de arredondamento em números grandes de cubos (
125
,343
etc).Calcula a quantidade de divisores (não apenas primos), se houver
1
ou2
retornarTrue
.A única exceção é quando um número tem mais de dois fatores primos, mas apenas dois divisores. Nesse caso, é um cubo perfeito de primo (seus divisores são a raiz do cubo e a raiz do cubo ao quadrado).
x**3==n
abordará esse caso, adicionar um à entrada raiz do cubo eleva a soma até uma contagem de 3 e interrompe o falso positivo. obrigado Jonathan Allan por escrever com esta bela explicaçãofonte
n**(1/3)%1>0<sum...
Deveria trabalhar.Ruby ,
5648 bytesExperimente online!
Como funciona:
Agradecemos ao Value Ink pela ideia que salvou 8 bytes.
fonte
c
começar com 0 e contar, em vez de torná-lo um array ao qual você adiciona todos os fatores? Dessa forma, você elimina a necessidade de usarsize
no finalMathematica,
3129 bytesfonte
Neim , 4 bytes
Experimente online!
fonte
𝐏
,𝐥
,δ
, e𝔼
como únicos-bytes.Python 2 , 67 bytes
Experimente online!
-10 bytes graças a @JonathanAllan!
O crédito para o algoritmo de fatoração Prime vai para Dennis (na versão inicial)
fonte
JavaScript (ES6), 47 bytes
Retorna um booleano.
Demo
Mostrar snippet de código
fonte
Mathematica 32 bytes
Graças ao ngenesis por 1 byte salvo
fonte
;;
vez deAll
.Gelatina , 5 bytes
Experimente online!
Explicação
fonte
Na verdade , 4 bytes
Experimente online!
fonte
05AB1E, 4 bytes
Experimente online!
Quão?
fonte
MATL, 5 bytes
Experimente online!
Explicação
Yf
- Fatores principais.n
- Comprimento.2=
- é igual a 2?fonte
Dyalog APL, 18 bytes
Experimente online!
Quão?
⎕CY'dfns'
- importaçãopco
3pco⎕
- executadopco
na entrada com argumento esquerdo 3 (fatores primos)2=≢
- comprimento = 2?fonte
Gaia , 4 bytes
4 bytes parece ser um comprimento comum, gostaria de saber por que ...: P
Experimente online!
Explicação
fonte
Python com SymPy 1.1.1 ,
5744 bytes-13 bytes graças a alefhalpha (use 1.1.1's
primeomega
)Experimente online!
fonte
lambda n:primeomega(n)==2
R , 67 bytes
Experimente online!
fonte
Ruby , 35 + 8 = 43 bytes
Usa o
-rprime
sinalizador para desbloquear aprime_division
função.Experimente online!
fonte
Java 8,
6961 bytes-8 bytes graças a @Nevay .
Experimente aqui.
fonte
else++r;
) para salvar 8 bytesn->{int r=1,c=2;for(;r++<n;)for(;n%r<1;n/=r)c--;return c==0;}
.Python 2 ,
7565 bytesExperimente online!
Todo o crédito à resposta da xnor para o código de fatoração principal original.
fonte
C #, 112 bytes
Com a formatação aplicada:
E como programa de teste:
Qual tem a saída:
fonte
Pari / GP , 17 bytes
Experimente online!
fonte
Retina , 45 bytes
Experimente online! O link inclui casos de teste. Explicação:
Converta para unário.
Tente encontrar dois fatores.
Assegure-se de que ambos os fatores sejam primos.
Garanta que dois fatores foram encontrados.
fonte
Python 2, 90 bytes
f
leva um número inteiron
maior ou igual a1
, retorna booleano.Experimente online!
Casos de teste:
fonte
J , 6 bytes
5 bytes funcionarão como únicos:
Acredito que preciso de seis quando defino a função:
fonte
Pyke , 5 bytes
Experimente aqui!
fonte
Japonês ,
65 bytesTeste on-line
Explicação
Faz praticamente o mesmo que a maioria das outras respostas:
k
obtém a matriz de fatores primos,Ê
obtém seu comprimento e¥
verifica a igualdade com2
.fonte
÷k o)j
também funciona, infelizmente, é do mesmo comprimento :-(Perl 6 , 43 bytes
Experimente online!
f
é o menor fator maior que 1 do argumento de entrada$_
ouNil
se$_
é 1. O valor de retorno da função é verdadeiro sef
for verdadeiro (ou seja, nãoNil
) E o argumento de entrada dividido pelo fator é primo.Se
$_
ele próprio é primo, entãof
será igual a$_
, e$_ / f
é 1, o que não é primo, portanto, a fórmula funciona nesse caso também.fonte