En Base-10, todos los cuadrados perfectos terminan en 0 , 1 , 4 , 5 , 6 o 9 .
En Base-16, todos los cuadrados perfectos terminan en 0 , 1 , 4 o 9 .
Nilknarf describe por qué esto es así y cómo resolverlo muy bien en esta respuesta, pero también daré una breve descripción aquí:
Al cuadrar un número de Base 10, N , el dígito "unos" no se ve afectado por lo que está en el dígito "decenas" o el dígito "cientos", y así sucesivamente. Solo el dígito "unos" en N afecta el dígito "unos" en N 2 , por lo que una forma fácil (pero quizás no la más elegante) de encontrar todos los últimos dígitos posibles para N 2 es encontrar n 2 mod 10 para todos 0 <= n < 10 . Cada resultado es un posible último dígito. Para Base-m, puede encontrar n 2 mod m para todos 0 <= n < m .
Escriba un programa que, cuando recibe la entrada N , emite todos los últimos dígitos posibles para un cuadrado perfecto en Base-N (sin duplicados). Puede suponer que N es mayor que 0 , y que N es lo suficientemente pequeño como para que N 2 no se desborde (si puede probar hasta N 2 , le daré una cantidad finita de puntos de brownie, pero sepa que el tipo de cambio de puntos brownie a puntos reales es infinito a uno).
Pruebas:
Input -> Output
1 -> 0
2 -> 0,1
10 -> 0,1,5,6,4,9
16 -> 0,1,4,9
31 -> 0,1,2,4,5,7,8,9,10,14,16,18,19,20,25,28
120 -> 0,1,4,9,16,24,25,36,40,49,60,64,76,81,84,96,100,105
Este es el código de golf , por lo que se aplican reglas estándar.
(Si considera que esto es demasiado fácil, o si desea una pregunta más detallada sobre el tema, considere esta pregunta: cobertura mínima de las bases para la prueba cuadrática de residuos de la cuadratura ).
fuente
Respuestas:
Jalea , 5 bytes
Pruébalo en línea!
Explicación
fuente
Hojas de cálculo de Google,
525147 bytesGuardado 4 bytes gracias a Taylor Scott
Las hojas agregarán automáticamente 4 paréntesis de cierre al final de la fórmula.
No devuelve los resultados en orden ascendente, pero devuelve los resultados correctos.
fuente
)
s de terminación para -4 bytes05AB1E , 5 bytes
Pruébalo en línea! o como un conjunto de pruebas
fuente
s
funciona aquí? ¿Se repite la entrada?s
espop a,b; push b,a
. Cuando un comando intenta extraer algo de la pila y no queda nada, se utiliza la siguiente entrada. Si no hay más entradas, se usa la última entrada ( aquí hay un ejemplo ). En este caso, podría haber utilizado el¹
que empuja la primera entrada, peros
funciona mejor para el conjunto de pruebas.Ln¹%ê
es equivalente aquí.s
.Swift ,
47 3532 * bytes* -3 gracias a @Alexander.
Posiblemente la primera vez en la historia ¿Los
lazosrápidos vencen a Python?Pruébalo en línea!
Explicación
(0..<m).map{}
- Itera a través del rango[0...m)
y mapea los siguientes resultados:$0*$0%m
- El cuadrado de cada número entero módulo la basem
.Set(...)
- Elimina los duplicados.m in
- Asigna la base a una variablem
fuente
C #, 63 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 52 bytes
Casos de prueba
Mostrar fragmento de código
Versión no recursiva,
6058 bytesGuardado 2 bytes gracias a @ThePirateBay
Casos de prueba
Mostrar fragmento de código
fuente
m=>(a=[...Array(m).keys()]).filter(v=>a.some(n=>n*n%m==v))
Pyth, 6 bytes
Pruébalo en línea
Cómo funciona
fuente
Brachylog ,
109 bytesPruébalo en línea!
Explicación
fuente
{>≜^₂;?%}ᵘ
como alternativa ... luego me di cuenta de que también hay números negativos. > _ <≜
.>
que aún explicaría los números negativos afaik.Japt ,
76 bytesPruébalo
1 byte guardado gracias a Oliver
Explicación
Entrada implícita de entero
U
.Cree una matriz de enteros desde
0
hastaU-1
, inclusive y pase cada uno a través de una función.Cuadrado.
Módulo
U
.Obtenga todos los elementos únicos en la matriz y genere implícitamente el resultado.
fuente
Dz%UÃâ
Parece funcionar bien.Python 3 ,
403937 bytes-1 byte gracias al Sr. Xcoder. -2 bytes gracias a Business Cat.
Pruébalo en línea!
fuente
n**2
conn*n
?range(m)
es suficienteEn realidad , 11 bytes
Pruébalo en línea!
Explicación:
fuente
CJam , 12 bytes
Bloqueo anónimo que acepta un número y devuelve una lista.
Pruébalo en línea!
Explicación
fuente
{:X{_*X%}%_&}
para 13 bytesHaskell , 45 bytes
-4 bytes de Anders Kaseorg
Pruébalo en línea!
fuente
f m=nub$map((`mod`m).(^2))[0..m]
es igual de larga, a menos que haya una sintaxis furtiva para deshacerse de los paréntesis adicionales.MATL ,
65 bytes-1 byte gracias a @LuisMendo
Pruébalo en línea!
fuente
Octava , 27 bytes
Pruébalo en línea!
fuente
Mathematica, 30 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 48 bytes
43 bytes si devolver un en
Set
lugar de una matriz es aceptable.fuente
Scala ,
3230 bytesUso simple de la sugerencia fácil de OP.
Pruébalo en línea!
-2 bytes gracias a @MrXcoder, con prioridades (sin necesidad de
()
alrededor*
operación)Preguntándose: ¿es posible decirle al compilador implícitamente que comprenda cosas como
(0 to n-1)map(x=>x*x%n)toSet
(sin tener que hacerloimport scala.language.postfixOps
)?fuente
(0 to n-1).map(x=>x*x%n).toSet
por 30 bytes. La exponenciación tiene mayor precedencia que el módulo.Haskell , 44 bytes
Pruébalo en línea!
fuente
Retina , 70 bytes
Pruébalo en línea! Advertencia: lento para entradas grandes. Versión de 72 bytes ligeramente más rápida:
Pruébalo en línea!
fuente
Clojure, 40 bytes
fuente
Perl 6 , 19 bytes
Pruébalo
Expandido:
fuente
Pyth , 13 bytes
Probar en línea
Cojo intento de explicar:
Para ordenar la salida, inserte un
S
en cualquier lado del{
Creo que debería haber un camino más corto ...
fuente
map
¡es tu amigo!Python 2 , 59 bytes
Pruébalo en línea!
fuente
PowerShell , 35 bytes
Pruébalo en línea!
fuente
R , 28 bytes
Pruébalo en línea!
fuente
Rubí ,
3130 bytesPruébalo en línea!
fuente
PHP , 53 bytes
Pase de 0 al número de entrada, usando la
n^2 mod base
fórmula para marcar los números que se han usado. Va a esa posición en una matriz, verificando si se ha incrementado y emitiéndola si no lo ha hecho. Luego lo incrementa para que no se impriman valores duplicados.Pruébalo en línea!
fuente
8 ° ,
138131 bytesCódigo
Explicación
[]
- Crear matriz de salidaswap dup >r
- Guardar entrada para uso posterior( 2 ^ r@ n:mod a:push ) 1 rot loop
- Calcular extremo cuadradordrop
- Limpiar r-stack' n:cmp a:sort
- Ordenar matriz de salida' n:cmp >r -1 a:@ swap ( tuck r@ w:exec ) a:filter rdrop nip
- Deshágase de los duplicados consecutivos de la matrizSED (Diagrama de efecto de pila) es:
a -- a
Uso y ejemplo
fuente
Perl 5 , 41 + 1 (-n) = 42 bytes
Pruébalo en línea!
fuente