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
PrimeOmega
cuenta el número de factores primos, contando la multiplicidad.fuente
SemiprimeQ
PrimeOmega
Pyth , 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
1
o2
se 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==n
cubrirá 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
c
comenzar 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 usarsize
al 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ónpco
3pco⎕
- ejecutarpco
en 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)==2
R , 67 bytes
Pruébalo en línea!
fuente
Ruby , 35 + 8 = 43 bytes
Utiliza la
-rprime
bandera para desbloquear laprime_division
funció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
f
toma un número enteron
mayor 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:
k
obtiene la matriz de factores primos,Ê
obtiene su longitud y¥
verifica la igualdad con2
.fuente
÷k o)j
también funciona, desafortunadamente tiene la misma duración :-(Perl 6 , 43 bytes
Pruébalo en línea!
f
es el factor más pequeño mayor que 1 del argumento de entrada$_
, oNil
si$_
es 1. El valor de retorno de la función es verdadero sif
es verdadero (es decir, noNil
) Y el argumento de entrada dividido por el factor es primo.Si
$_
es primo, entoncesf
será igual a$_
, y$_ / f
es 1, que no es primo, por lo que la fórmula también funciona en ese caso.fuente