Me gusta pensar en un número de 10 adic como un número que va infinitamente a la izquierda, o un módulo entero con una potencia muy grande de 10.
Las cosas se llevan infinitamente a la izquierda y se desvanecen. Para ver lo que quiero decir, tenga ...6667 * 3 = 1en cuenta que en la tierra de 10 adictos, ya que el "2" que lleva a la izquierda va al infinito.
La suma y la multiplicación tienen sentido para los números de 10 adic, ya que los últimos ndígitos de la suma / producto solo dependen de los últimos ndígitos de los sumandos / multiplicandos.
Dado n, debe imprimir los últimos ndígitos de la raíz cúbica de 10 adic de 3, es decir, xsatisfactorio x*x*x = 3.
Termina:
...878683312291648481630318492665160423850087895134587
Su código debe terminar n=1000antes del envío.
Digamos que si el número que necesita imprimir comienza con cero, entonces no necesita imprimir los ceros iniciales, ya que en realidad no es el punto para imprimir ceros adicionales.
Este es el código de golf . La respuesta más corta en bytes gana.
fuente

n=12salida en87895134587lugar de087895134587. Personalmente, lo haría opcional, ya que invalidaría casi todas las respuestas ...Respuestas:
Python 2 , 33 bytes
Pruébalo en línea!
La
powfunción calcula eficientemente el exponente modular3**(10**k*2/3+1)%10**k.Se nos pide encontrar una solución para
r**3 = 3 (mod 10**k). Queremos encontrar un exponenteepara el que el mapax -> x**esea inverso a lax -> x**3modificación del funcionamiento en cubos10**k, al igual que los exponentes de descifrado y cifrado en RSA se cancelan para producir el valor original. Esto significa que(x**3)**e = x (mod 10**k)para todosx. (Asumiremos a lo largo de esogcd(x,10) = 1). Entonces, podemos recuperarrinvirtiendo el cubo para obtenerr = 3**e (mod 10**k).Expandiéndonos
(r**3)**e = r (mod 10**k), obtenemosEstamos buscando un exponente
3*e-1que garantice la multiplicación que tantas copias nos da1.El módulo de multiplicación
10**kforma un grupo para números invertibles, es decir, aquellos congcd(x,10) = 1. Por el teorema de Lagrange,x**c = 1dondecestá la cuenta de elementos en el grupo. Para el módulo de grupoN, ese recuento es el valor total de Eulerφ(N), el número de valores de1aNque son relativamente primosN. Entonces, tenemosr**φ(10**k) = 1 (mod 10**k). Por lo tanto, es suficiente para3*e-1ser un múltiplo deφ(10**k).Calculamos
Entonces, queremos
3*e-1ser un múltiplo de4 * 10**(k-1)Son posibles muchas opciones
r, peror=5da la breve expresióncon
eun número entero Un poco de golf usando acorta suelo de divisiónea10**k*2/3+1, y expresandor = 3**e (mod 10**k)da el resultado deseador.fuente
(r**3)**e = x (mod 10**k)ser(r**3)**e = r (mod 10**k)? ¿También es solo una coincidencia eso(2 * 10**k + 1)/3 = 1/3 (mod 10**k)?2con cualquier númerox = 2 (mod 3)Python 2 (PyPy) ,
5550 bytes-5 bytes gracias a @HP Wiz !
Pruébalo en línea!
Calcula (sin fuerza bruta) dígito por dígito, por lo que es más rápido que la fuerza bruta.
Versión sin ejecutivo
Explicación
(Gracias @Leaky Nun y @ user202729 por resolver esto)
Primero, observe que
n**3es un módulo de involución 10 (es decir, si se llama a la funciónf, entoncesf(f(n)) == n). Esto se puede confirmar mediante una búsqueda exhaustiva.Podemos usar la inducción matemática para encontrar el siguiente dígito.
Deje ser el dígito th del número (desde la derecha).
dnnd 1 3 ≡ 3 (mod 10) d 1 ≡ 3 3 (mod 10) ≡ 27 (mod 10) ≡ 7 (mod 10)Ahora, supongamos que sabemos el número hasta el
kdígito th,xLo sabemos:
x ≡ 7 (mod 10) x 2 ≡ 49 (mod 10) ≡ 9 (mod 10) x 2 · 10 k ≡ 9 · 10 k (mod 10 k + 1 ) 3 · x 2 · 10 k ≡ 27 · 10 k (mod 10 k + 1 ) ≡ 7 · 10 k (mod 10 k + 1 )Sustituyendo esto en:
3 · d k + 1 x 2 · 10 k + x 3 ≡ 3 (mod 10 k + 1 ) 7 · d k + 1 · 10 k + x 3 ≡ 3 (mod 10 k + 1 ) d k + 1 ≡ (3 - x 3 ) ÷ (7 · 10 k ) (mod 10) ≡ (3 - x 3 ) ÷ (7 · 10 k ) (mod 10) ∴ d k + 1 ≡ 3 · (3 - x 3 ) ÷ 10 k (mod 10) (3 es el inverso de 7 mod 10)fuente
11dígitos paran=12yn=13.Wolfram Language (Mathematica) , 21 bytes
Pruébalo en línea!
fuente
05AB1E ,
1713 bytesPuerto de la respuesta de Python 2 (PyPy) de @ ASCII-only .
-4 bytes Y corrección de errores para salidas con ceros iniciales gracias a @Emigna , reemplazando
T%N°*+conθì.Pruébalo en línea.
Explicación:
fuente
T%N°*+aθìpor mí, y el cero 'arreglo' que conduce era sólo una buena ventaja de este enfoque.Java 8,
158156141136135 bytesPuerto de la respuesta de Python 2 (PyPy) de @ ASCII-only .
-2 bytes gracias a @Neil .
-20 bytes gracias a @ ASCII-only .
NOTA: @ OlivierGrégoire ya cuenta con una respuesta Java mucho más corta que utiliza un enfoque algorítmico
modPow.Pruébalo en línea.
Explicación:
fuente
java.math.BigInteger u=null,r=u.valueOf(7),t=r;?java.math.BigInteger t=null,r=u.valueOf(7);t=r;inicialmente antes de agregar elude ahorrar algo de bytes.Java (JDK 10) , 106 bytes
Pruébalo en línea!
Créditos
fuente
for(int l=0,d;++l<=n;y cambiandoBigInteger I=null;avar I=new BigInteger("3");lo que podemos reutilizar.for(int l=0,d;l++<n;).corriente continua , 15
Utiliza exponenciación modular, como la respuesta de @ xnor .
Pruébalo en línea!
TIO calcula input = 1000 en 21s.
fuente
Pyth , 12
Pruébalo en línea!
Nuevamente, usando exponenciación modular, como la respuesta de @ xnor .
fuente
Haskell , 37 bytes
¡1 byte guardado gracias a ASCII-only!
Pruébalo en línea!
Utilizo un enfoque similar al ASCII solo, pero evito usar la división
fuente
Pyth , 23 bytes
Por supuesto, esto utiliza el enfoque de ASCII solamente.
Pruébalo aquí!
fuente
Carbón ,
2622 bytesPruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Inicialice el resultado a 7. (No tiene que ser 7, pero 0 no funciona).
Pase el número de dígitos requeridos.
Ahora usa el enfoque de @ HPWiz para guardar 4 bytes.
Imprime el resultado.
Aquí hay una versión de fuerza bruta de 28 bytes que toma raíces cúbicas de valores arbitrarios:
Pruébalo en línea! El enlace es a la versión detallada del código. La primera entrada es el número de dígitos, la segunda es el valor de la raíz.
fuente
kcon la lista invertida como un número base 10.Base(Reverse(u), 10)pero el prefijokhabría costado 4 bytes, mientras que hacerlo como una cadena solo cuesta 2 bytes, lo que resulta en un ahorro de 1 byte después de tenerCasten cuenta.J , 33 bytes
TIO
puerto de la respuesta de @ ASCII-only pero usando un módulo fijo 10 ^ n en todo
fuente
Gelatina ,
231817 bytesPruébalo en línea!
Sé
ƒque será útil.fuente