Sea (entrada)
Entonces los divisores son: 1, 2, 3, 6, 7, 14, 21, 42
Cuadrando cada divisor: 1, 4, 9, 36, 49, 196, 441, 1764
Sumando (sumando): 2500
Como por lo tanto, devolvemos un valor verdadero. Si no es un cuadrado perfecto, devuelve un valor falso.
Ejemplos:
42 ---> true
1 ---> true
246 ---> true
10 ---> false
16 ---> false
Este es el código de golf, por lo que el código más corto en bytes para cada idioma gana
Gracias a @Arnauld por señalar la secuencia: A046655
code-golf
math
number
decision-problem
Usuario Any3nymous
fuente
fuente

Respuestas:
R ,
3937 bytesPruébalo en línea!
Utiliza el enfoque clásico de "prueba si cuadrado perfecto", que toma la parte no integral de la raíz cuadrada
S^.5%%1y toma la negación lógica de la misma, ya que asigna cero (cuadrado perfecto)TRUEy no cero aFALSE.¡Gracias a Robert S por guardar un par de bytes!
fuente
scan()para guardar algunos bytes?JavaScript (ES7),
46 4442 bytesGuardado 1 byte gracias a @Hedi
Pruébalo en línea!
Comentado
fuente
dpasar denque0en lugar de2anla siguiente:n=>!((g=d=>d?d*d*!(n%d)+g(d-1):0)(n)**.5%1)05AB1E , 5 bytes
Pruébalo en línea!
¿Cómo?
fuente
Lenguaje de programación Shakespeare ,
434428415 bytesPruébalo en línea!
-13 bytes gracias a Jo King!
Salidas
1para resultado verdadero, salidas0para resultado falso.fuente
Python 2 , 55 bytes
Pruébalo en línea!
fuente
Neim , 5 bytes
Explicación:
Pruébalo en línea!
fuente
C (gcc) ,
67636059 bytes-1 bytes gracias a @JonathanFrech
Pruébalo en línea!
fuente
++i<=nseri++<n?Brachylog ,
128 bytes-4 bytes gracias a Fatelize porque no me di cuenta de que brachylog tiene funciones de factores
explicación
Pruébalo en línea!
fuente
f^₂ᵐes 4 bytes más corto queḋ{⊇×^₂}ᵘMathGolf ,
54 bytesPruébalo en línea!
Explicación
Muy similar a otras respuestas, en comparación con 05AB1E, obtengo un byte para mi operador "es cuadrado perfecto".
fuente
MATL , 9 bytes
Pruébalo en línea!
Tan simple como se pone
fuente
PowerShell ,
6856 bytesPruébalo en línea!
Parece largo ...-12 bytes gracias a mazzy
Hace exactamente lo que dice en la lata. Toma el rango de
1a input$ny multiplica los cuadrados por$_*$_si es un divisor o no!($n%$_). Esto hace que los divisores sean iguales a un número distinto de cero y los no divisores iguales a cero. Luego tomamos la suma de ellos con nuestro acumulador$a. Luego, volvemos a recorrer de1arriba a abajo$ay sacamos esos números donde el|?{...}cuadrado es-equal$a. Eso se deja en la tubería y la salida es implícita.Produce un número entero positivo para la verdad, y nada para Falsey.
fuente
$args[0]es más corto :)1..$args[0]|%{$a+=$_*$_*!($n%$_)};1..$a|?{$_*$_-eq$a}$ndentro del bucle para!($n%$_). Pero, su reescritura de la suma ahorró 12 bytes, ¡así que gracias!$args[0]sea más corto :)Japt ,
1197 bytes-2 bytes de @Giuseppe y otro -2 de @Shaggy
Pruébalo en línea!
fuente
APL (Dyalog Unicode) , 18 bytes
Pruébalo en línea!
Lambda anónima. Devuelve 1 para verdadero y 0 para falso (los casos de prueba en TIO están prettified).
¡Saludos a @ H.PWiz por 4 bytes!
Cómo:
fuente
notlugar de0=guardar un byte?notoperador de APL (~), cuando se usa de manera monádica, solo funciona con booleanos (0 o 1). Como cualquier número de módulo 1 nunca es igual a 1, si lo usara en~lugar de0=, obtendría undomain errornúmero que no sea un cuadrado perfecto, ya que los valores decimales están fuera del~dominio de. Además, no puedo omitir simplemente0=, ya que el valor verdadero de APL es 1, no 0, y no tendría una salida consistente para valores falsos.K (oK) ,
262522 bytesSolución:
Pruébalo en línea!
Explicación:
Notas:
fuente
Pari / GP , 23 bytes
Pruébalo en línea!
fuente
Matlab,
3937 bytesDesafortunadamente, no funciona en Octave (en tio), por lo que no hay tio link.
Nota Como dijo @LuisMendo,
divisors()pertenece a Symbolic Toolbox.fuente
divisorspertenece a la Caja de herramientas simbólica. Deberías indicarlo en el título. Además, puede usar en~···lugar de···==0sum(...)^.5lugar desqrt(sum(...))Haskell ,
786453 bytes-14 bytes gracias a Ørjan Johansen . -11 bytes gracias a los ovs .
Pruébalo en línea!
Oye, ha pasado un tiempo desde que ... escribí cualquier código, así que mi Haskell y el golf podrían estar un poco oxidados. Olvidé los problemáticos tipos numéricos de Haskell. :PAG
fuente
Pyt , 7 bytes
Pruébalo en línea!
Explicación
Pruébalo en línea!
Explicación
Pruébalo en línea!
Explicación
fuente
Casco , 6 bytes
Pruébalo en línea!
Explicación
fuente
Jalea , 6 bytes
Pruébalo en línea! O vea el conjunto de pruebas .
¿Cómo?
fuente
Protón , 41 bytes
Pruébalo en línea!
Enfoque similar a la respuesta de Python.
fuente
Mathematica, 32 bytes
Pura función. Toma un número como entrada y devuelve
TrueoFalsecomo salida. No estoy del todo seguro si hay un método más corto para verificar cuadrados perfectos.fuente
Octava / MATLAB, 43 bytes
Pruébalo en línea!
fuente
Rojo , 67 bytes
Pruébalo en línea!
fuente
Scala ,
6867 bytesPruébalo en línea!
fuente
Perl 6 , 34 bytes
-1 byte gracias a nwellnhof
Pruébalo en línea!
fuente
**.5es un byte más corto que.sqrt.F #, 111 bytes
Pruébalo en línea!
Entonces
dobtiene los divisores para todos los números entre 1 eninclusive. En la función principalu, la primera línea asigna la suma de todos los divisores al cuadradom. La segunda línea obtiene los divisoresmy determina si alguno de ellos al cuadrado es igualm.fuente
Perl 5, 47 bytes
Devuelve 1 para verdadero y nada para falso.
Explicación:
fuente
Groovy , 47 bytes
Una lambda que acepta un argumento numérico.
Explicación
(1..n)crea una matriz de los valores de 1 a nn%ies falso (ya que 0 es falso) siidividensin reston%i ? 0 : i*ies la suma del cuadrado del valorisi dividensin resto, de lo contrario es 0sum{ i-> n%i ? 0 : i*i }suma el resultado anterior en todoside la matriz.s%Math.sqrt(s)es falso (ya que 0 es falso) si el sqrt desdividessin resto!(s%Math.sqrt(s))regresa de lambda (returnimplícito en la última instrucción)!falsecuando el sqrt desdividessin restoPruébalo en línea!
fuente
Java 8,
7570 bytes-5 bytes gracias a @ archangel.mjj .
Pruébalo en línea.
Explicación:
fuente
n->{int s=0,i=0;for(;++i<=n;)s+=n%i<1?i*i:0;return Math.sqrt(s)%1==0;}