Un número esfénico es un número que es el producto de exactamente tres primos distintos. Los primeros pocos números esfénicos son 30, 42, 66, 70, 78, 102, 105, 110, 114
. Esta es la secuencia A007304 en el OEIS.
Tu tarea:
Escriba un programa o función para determinar si un entero ingresado es un número esfénico.
Entrada:
Un número entero entre 0 y 10 ^ 9, que puede o no ser un número esférico.
Salida:
Un valor verdadero / falso que indica si la entrada es un número esférico.
Ejemplos:
30 -> true
121 -> false
231 -> true
154 -> true
4 -> false
402 -> true
79 -> false
0 -> false
60 -> false
64 -> false
8 -> false
210 -> false
Tanteo:
Este es el código de golf , el código más corto en bytes gana.
code-golf
number
decision-problem
primes
Gryphon - Restablece a Monica
fuente
fuente
60
un número esférico?2 × 2 × 3 × 5
60
no es un número esférico. (esperando la aclaración del OP)Respuestas:
Brachylog ,
63 bytesPruébalo en línea!
Explicación
fuente
≠
.Ṫ
también.Ṫ
no es realmente un predicado incorporado; Es una variable incorporada: una lista de 3 elementos variables. Es una variable preconstreñida bastante útil en muchos desafíos diferentes.bash, 43 bytes
Pruébalo en línea!
Entrada mediante argumento de línea de comando, salidas
0
o1
stdout.Bastante autoexplicativo; analiza la salida de
factor
para verificar que el primer y el segundo factor son diferentes, el segundo y el tercero son diferentes (están ordenados, por lo que es suficiente), y hay cuatro campos (el número de entrada y los tres factores).fuente
MATL , 7 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
X=
es la obra más triste que he visto en mi vida.C,
8878126587773 + 4 (lm
) = 77 bytesExplicación comentada sin golf:
Pruébalo en línea!
fuente
i*1.0/l
lugar del elenco para flotar. (Y puesto quel
,j
son globales se inicializan a 0 de forma gratuita, no es necesario hacerlo si la función sólo se llama una vez No está seguro de cuál es la regla para eso..)CJam , 11 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
Basado en mi respuesta MATL.
fuente
Jalea , 8 bytes
Pruébalo en línea!
Utiliza el algoritmo de Luis Mendo.
Explicación:
fuente
Casco , 6 bytes
Pruébalo en línea!
Devuelve 1 para números esféricos y 0 en caso contrario.
Explicación
En el último pasaje, la congruencia entre dos listas significa tener la misma longitud y la misma distribución de valores de verdad / falsedad. En este caso, estamos verificando que nuestro resultado esté compuesto por dos valores verdaderos (es decir, que no sean cero).
fuente
Mathematica, 31 bytes
fuente
PrimeNu
igual de bienPrimeOmega
y es más corto.Jalea , 6 bytes
Pruébalo en línea!
Cómo funciona
fuente
05AB1E ,
75 bytesPruébalo en línea!
Utiliza el algoritmo de Dennis.
fuente
En realidad , 7 bytes
Pruébalo en línea!
Explicación:
fuente
Haskell , 59 bytes
Pruébalo en línea!
fuente
J , 15 bytes
Pruébalo en línea!
Explicación
fuente
Dyalog APL, 26 bytes
Pruébalo en línea!
fuente
Ruby,
814946 bytesIncluye 6 bytes para opciones de línea de comando
-rprime
.Pruébalo en línea!
fuente
Python 3 ,
5453 bytes¡Gracias a @xnor por jugar golf en 1 byte!
Pruébalo en línea!
fuente
k*k%n
lugar den%k**2
C,
91102 bytes, corregido (de nuevo), golfizado y probado en tiempo real esta vez:/ * Esto también funciona en 93 bytes, pero como me olvidé de las reglas estándar que prohíben el tipo int predeterminado en las variables dinámicas, y de no permitir valores de retorno implícitos sin asignaciones, no lo voy a tomar:
(¿Quién dijo que sabía algo sobre C? ;-)
Aquí está el marco de prueba con script de shell en los comentarios:
Tomé prestada la respuesta anterior de betseg para obtener mi versión.
Esta es mi versión del algoritmo de betseg, que jugué para llegar a mi solución:
fuente
[betseg's answer](/codegolf//a/135203/65836)
. También puede hacer clic en editar en su respuesta para sugerir una edición, si lo desea, que incluiría la explicación, sin promesas de si se aprobará o no.Pyth, 9 bytes
Pruébalo aquí.
fuente
Javascript (ES6), 87 bytes
Fragmento de código de ejemplo:
fuente
Python 2 ,
135121 bytesPruébalo en línea!
fuente
Python 2 , 59 bytes
Pruébalo en línea!
fuente
J, 23 bytes
Pruébalo en línea!
El manejo de 8 y 0 básicamente arruinó este ...
q:
le da todos los factores primos, pero no maneja 0. el resto simplemente dice "los factores únicos deberían ser iguales a los factores" y "el número de ellos debería ser 3"fuente
60
8
.(6=]#@,~.)@q:
como posible soluciónJapt , 14 bytes
Pruébalo en línea!
fuente
Number.k()
, que no tendría ningún efecto y solo comprobaría si la entrada tiene 3 factores primos, no 3 factores primos distintos . Eso significaría8
(con tres factores primos :)2, 2, 2
pasaría a pesar de no estar en A0073048
a los casos de prueba por esa razón.Mathematica, 44 bytes
Pruébalo en línea!
fuente
VB.NET (.NET 4.5), 104 bytes
Estoy usando la función de VB donde el nombre de la función también es una variable. Al final de la ejecución, dado que no hay una declaración de retorno, pasará el valor de la 'función'.
Lo último
A=A=3
se puede pensarreturn (A == 3)
en lenguajes basados en C.Comienza en 2 y extrae los números primos de forma iterativa. Como empiezo con los primos más pequeños, no se puede dividir por un número compuesto.
Intentará dividir por segunda vez por la misma prima. Si es así (por ejemplo, cómo 60 se divide dos veces por 2), establecerá el recuento de primos en 4 (por encima del máximo permitido para un número esférico).
¡Pruébelo en línea!
fuente
Dyalog APL,
514948464543 bytesPruébalo en línea! (modificado para que pueda ejecutarse en TryAPL)
Quería enviar uno que no se base en el espacio de nombres dfns, incluso si es largo .
fuente
J,
151419 bytesIntento previo:
3&(=#@~.@q:)~*
Versión actual:
(*/*3=#)@~:@q: ::0:
Cómo funciona:
Esto pasa para los casos 0, 8 y 60 que la versión anterior no tenía.
fuente
Mathematica,
6657 bytesDefine una función anónima.
es transponer .Explicación
FactorInteger
da una lista de pares de factores y sus exponentes. Por ejFactorInteger[2250]=={{2,1},{3,2},{5,3}}
. Esto se transpone para facilitar su uso y se alimenta a la funciónLength@#1==3&&And@@EqualTo[1]/@#2&
. La primera parteLength@#1==3
verifica que hay 3 factores únicos, mientras que la segundaAnd@@EqualTo[1]/@#2
verifica que todos los exponentes sean 1.fuente
PHP, 66 bytes:
Ejecutar como tubería
-nR
o probarlo en línea .Bucle infinito para
0
; inserte$n&&
antes--$n
de arreglar.Descompostura
argumento de ejemplo =
30
:los factores primos son
2
,3
y5
otros divisores son
1
, 2 * 3 =6
, 2 * 5 =10
y 3 * 5 =15
su producto:
1*2*3*5*6*10*15
es27000
==30**3
fuente
Python 99 bytes
Primera presentación Perdóname si hice algo mal. Un poco tonto, cuenta el número de factores de
n
, y luego el número de vecesn
es divisible por cada uno (sumando 10 ** 9).Estoy bastante seguro de que hay algunas maneras fáciles de cortar ~ 10-20 caracteres, pero no lo hice.
Además, esto es intratablemente lento a 10 ** 9. Podría hacerse bien cambiando
'...a+=1\n'*n
a'...a+=1\n'*n**.5
, ya que solo necesitamos ir a la raíz cuadrada den
.fuente