Sorprendentemente, no creo que tengamos una pregunta de código de golf para determinar si un número es semiprime .
Un semiprime es un número natural que es el producto de dos números primos (no necesariamente distintos).
Bastante simple, pero un concepto notablemente importante.
Dado un número entero positivo, determine si es un semiprime. Su salida puede ser de cualquier forma siempre que proporcione la misma salida para cualquier valor verdadero o falso. También puede suponer que su entrada es razonablemente pequeña como para que el rendimiento o el desbordamiento no sean un problema.
Casos de prueba:
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
Este es el código de golf , por lo que se aplican reglas estándar.

Respuestas:
Brachylog , 2 bytes
Básicamente un puerto de la respuesta de Fatalize al desafío del número esférico.
Pruébalo en línea!
¿Cómo?
fuente
Ċes en realidad una lista integrada de dos variables; Al ser un lenguaje declarativo, la salida es, por defecto, una prueba de satisfacción (por ejemplo,ḋpor sí sola daría salidatrue.para enteros no negativos).c6 eb.Casco , 4 bytes
Mira ma no Unicode!
Pruébalo en línea!
¿Cómo?
fuente
Mathematica, 16 bytes
PrimeOmegacuenta el número de factores primos, contando la multiplicidad.fuente
SemiprimeQPrimeOmegaPyth , 4 bytes
Banco de pruebas .
¿Cómo?
fuente
Python 3 , 54 bytes
Pruébalo en línea!
El Verson anterior tenía algunos problemas de redondeo de números de cubo grande (
125,343, etc.)Esto calcula la cantidad de divisores (no sólo los números primos), si tiene
1o2se devuelveTrue.La única excepción es cuando un número tiene más de dos factores primos pero solo dos divisores. En este caso, es un cubo perfecto de un primo (sus divisores son su raíz cúbica y su raíz cúbica al cuadrado).
x**3==ncubrirá este caso, agregar uno a la entrada raíz del cubo empuja la suma hasta un recuento de 3 y detiene el falso positivo. gracias Jonathan Allan por escribir con esta hermosa explicaciónfuente
n**(1/3)%1>0<sum...Deberia trabajar.Ruby ,
5648 bytesPruébalo en línea!
Cómo funciona:
Gracias Value Ink por la idea que ahorró 8 bytes.
fuente
ccomenzar en 0 y contar hacia arriba, en lugar de convertirlo en una matriz a la que agrega todos los factores? De esa manera, elimina la necesidad de usarsizeal finalMathematica,
3129 bytesfuente
Neim , 4 bytes
Pruébalo en línea!
fuente
𝐏,𝐥,δ, y𝔼como solo-bytes.Python 2 , 67 bytes
Pruébalo en línea!
-10 bytes gracias a @JonathanAllan!
El crédito para el algoritmo de factorización Prime corresponde a Dennis (en la versión inicial)
fuente
JavaScript (ES6), 47 bytes
Devuelve un booleano.
Manifestación
Mostrar fragmento de código
fuente
Mathematica 32 bytes
Gracias a ngenesis por 1 byte guardado
fuente
;;lugar deAll.Jalea , 5 bytes
Pruébalo en línea!
Explicación
fuente
En realidad , 4 bytes
Pruébalo en línea!
fuente
05AB1E, 4 bytes
Pruébalo en línea!
¿Cómo?
fuente
MATL, 5 bytes
Pruébalo en línea!
Explicación
Yf- Factores primos.n- Longitud.2=- ¿Es igual a 2?fuente
Dyalog APL, 18 bytes
Pruébalo en línea!
¿Cómo?
⎕CY'dfns'- importaciónpco3pco⎕- ejecutarpcoen entrada con argumento izquierdo 3 (factores primos)2=≢- longitud = 2?fuente
Gaia , 4 bytes
4 bytes parece ser una longitud común, me pregunto por qué ...: P
Pruébalo en línea!
Explicación
fuente
Python con SymPy 1.1.1 ,
5744 bytes-13 bytes gracias a alephalpha (use 1.1.1's
primeomega)Pruébalo en línea!
fuente
lambda n:primeomega(n)==2R , 67 bytes
Pruébalo en línea!
fuente
Ruby , 35 + 8 = 43 bytes
Utiliza la
-rprimebandera para desbloquear laprime_divisionfunción.Pruébalo en línea!
fuente
Java 8,
6961 bytes-8 bytes gracias a @Nevay .
Pruébalo aquí
fuente
else++r;) para guardar 8 bytesn->{int r=1,c=2;for(;r++<n;)for(;n%r<1;n/=r)c--;return c==0;}.Python 2 ,
7565 bytesPruébalo en línea!
Todo el crédito a la respuesta de xnor para el código original de factorización prima.
fuente
C #, 112 bytes
Con el formato aplicado:
Y como programa de prueba:
Cuál tiene la salida:
fuente
Pari / GP , 17 bytes
Pruébalo en línea!
fuente
Retina , 45 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Convierte a unario.
Intenta encontrar dos factores.
Asegúrese de que ambos factores sean primos.
Asegúrese de que se encontraron dos factores.
fuente
Python 2, 90 bytes
ftoma un número enteronmayor o igual que1, devuelve boolean.Pruébalo en línea!
Casos de prueba:
fuente
J , 6 bytes
5 bytes funcionarán de forma única:
Creo que necesito seis cuando defino la función:
fuente
Pyke , 5 bytes
Pruébalo aquí!
fuente
Japt ,
65 bytesPruébelo en línea
Explicación
Hace casi lo mismo que la mayoría de las otras respuestas:
kobtiene la matriz de factores primos,Êobtiene su longitud y¥verifica la igualdad con2.fuente
÷k o)jtambién funciona, desafortunadamente tiene la misma duración :-(Perl 6 , 43 bytes
Pruébalo en línea!
fes el factor más pequeño mayor que 1 del argumento de entrada$_, oNilsi$_es 1. El valor de retorno de la función es verdadero sifes verdadero (es decir, noNil) Y el argumento de entrada dividido por el factor es primo.Si
$_es primo, entoncesfserá igual a$_, y$_ / fes 1, que no es primo, por lo que la fórmula también funciona en ese caso.fuente