Números x tales que x ^ 2 divide 7 ^ x-1


16

Tarea

Hay un conjunto de números x, que x^2divide 7^x-1.

Tu tarea es encontrar estos números. Dada una entrada de n, el código imprimirá el enésimo número que sigue esta regla.

Ejemplos 1-índice

In   Out
3    3
9    24
31   1140

La secuencia relevante se puede encontrar aquí .

Reglas

La respuesta más corta será el ganador *

Aplican reglas estándar de golf

Las lagunas no están permitidas.

Su respuesta puede ser 0 o 1 indexada, indique en su respuesta


@nimi Los escribí al planificar y nunca los implementé. He actualizado la pregunta
george el

¿Cuáles son los límites de n? Puedo dar el resultado correcto con n=9, pero n=10ya me está causando problemas.
briantist

@briantist Si obtiene el resultado incorrecto para valores de entrada más altos, su respuesta es incorrecta. Si solo lleva mucho tiempo, eso puede depender de la implementación.
mbomb007

No solo lleva mucho tiempo. n=10me da 32; es porque comienza a usar el doble en lugar de los enteros y el mod es incorrecto después de eso. :(
briantist

Respuestas:


8

Haskell, 34 bytes

([x|x<-[1..],mod(7^x-1)(x^2)<1]!!)

Esto usa indexación basada en 0. Ejemplo de uso: ([x|x<-[1..],mod(7^x-1)(x^2)<1]!!) 30-> 1140.

Es una implementación directa de la definición. Construye una lista de todos los números xy elige el nth.


5

Pyth , 10 bytes

e.f!%t^7Z*

Un programa que toma la entrada de un número entero e imprime un valor indexado.

Pruébalo en línea!

Cómo funciona

e.f!%t^7Z*     Program. Input: Q
e.f!%t^7Z*ZZQ  Implicit variable fill
               Implicitly print
e              the last
 .f         Q  of the first Q positive integers Z
     t^7Z      for which 7^Z - 1
    %          mod
         *ZZ   Z^2
   !           is zero

5

JavaScript (ES7), 40 bytes

f=(n,i=1)=>n?f(n-!((7**++i-1)%i**2),i):i

Esto pierde precisión con bastante rapidez debido a que JS pierde precisión por 7**19. Aquí hay una versión ES6 de precisión casi arbitraria:

f=(n,i=0)=>n?f(n-!(~-(s=++i*i,g=j=>j?g(j-1)*7%s:1)(i)%s),i):i

Esto termina en aproximadamente un segundo para el caso de prueba 31.

Algunos enfoques más largos:

f=(n,i=0)=>n?f(n-!(~-(s=>g=j=>j?g(j-1)*7%s:1)(++i*i)(i)%s),i):i
f=(n,i=0)=>n?f(n-!(s=++i*i,g=(j,n=1)=>j?g(j-1,n*7%s):~-n%s)(i),i):i
f=(n,i=0)=>n?f(n-!(s=>g=(j,n=1)=>j?g(j-1,n*7%s):~-n%s)(++i*i)(i),i):i

4

05AB1E , 11 bytes

µ7Nm<NnÖiN¼

Pruébalo en línea!

Por alguna razón no puedo ½trabajar µ7Nm<NnÖ½No estaría atado con Pyth.

µ           # Loop until the counter equals n.
 7Nm<       # Calc 7^x+1.
     Nn     # Calc x^2.
       Ö    # Check divisibility.
        iN¼ # If divisible, push current x and increment counter.
            # Implicit loop end.
            # Implicitly return top of stack (x)

.


Sí, he tenido esa peculiaridad Öen mi lista de arreglos durante meses, pero nunca llego a lidiar con eso. De todos modos, no necesita la salida automática, Nya que la pila está vacía. µN
Emigna

4

Python 2 , 48 46 bytes

¡Gracias a @Dennis por -2 bytes!

f=lambda n,i=1:n and-~f(n-(~-7**i%i**2<1),i+1)

Una función recursiva de un índice que toma datos a través de argumentos y devuelve el resultado.

Pruébalo en línea! (Límite de recursión aumentado para permitir que se ejecute el caso de prueba final)

Cómo funciona

n es el índice deseado, y i es la variable de conteo.

La expresión ~-7**i%i**2<1devuelve True(equivalente a 1) si se i^2divide 7^i - 1, y False(equivalente a 0) de lo contrario. Cada vez que se llama a la función, se resta el resultado de la expresión n, disminuyendon cada vez que se encuentra un hit; iTambién se incrementa.

El comportamiento de cortocircuito de andsignifica que cuando nes 0, 0se devuelve; Este es el caso base. Una vez que se alcanza esto, la recursión se detiene y la illamada a la función original devuelve el valor actual de . En lugar de usar explícitamente i, esto se hace usando el hecho de que para cada llamada de función, se ha realizado un incremento usando el -~frente de la llamada; incrementando los 0 itiempos da i, según sea necesario.


1
(~-7**i%i**2<1)Guarda un par de bytes.
Dennis

@ Dennis ¡Por supuesto! Gracias.
TheBikingViking

3

Python 2 , 57 53 51 bytes

-4 bytes gracias a ETHproductions
-2 bytes gracias a TuukkaX

i=0
g=input()
while g:i+=1;g-=~-7**i%i**2<1
print i

Pruébalo en línea!
la secuencia está indexada 1


@ETHproductions sí c:
Rod

¿Un caso de prueba falla si elimina los paréntesis (7**i)? Los eliminé y funcionó para los que probé.
Yytsi

@TuukkaX, de hecho, **tiene una prioridad más alta que ~y-
Rod

2

Python 2, 57 bytes

Esto toma realmente muy largo tiempo para valores grandes. También usa mucha memoria, porque construye la lista completa mucho más de lo necesario. El resultado está indexado a cero.

lambda n:[x for x in range(1,2**n+1)if(7**x-1)%x**2<1][n]

Pruébalo en línea


por curiosidad, ¿hay alguna prueba para el 2**n+1límite superior?
Rod

@ Rod No lo sé, pero teniendo en cuenta que hay 50 valores <5000, estoy seguro de que hay mucho más de 50 < 2**50. Podría usar 9**n+9, pero lleva mucho más tiempo. Empecé a correr hace f(20)un tiempo (con 2**n+1); Todavía no se ha completado.
mbomb007

¡Ni siquiera creo que haya una prueba de que la secuencia es infinita, y mucho menos un buen límite superior para el enésimo término!
Greg Martin

2

Mathematica, 43 bytes

Actualmente tengo tres soluciones diferentes en este recuento de bytes:

Nest[#+1//.x_/;!(x^2∣(7^x-1)):>x+1&,0,#]&
Nest[#+1//.x_/;Mod[7^x-1,x^2]>0:>x+1&,0,#]&
Nest[#+1//.x_:>x+Sign@Mod[7^x-1,x^2]&,0,#]&

¿Cuál es el carácter entre x ^ 2 y (7 ^ x ... en la primera línea? Parece una tubería pero más corto
Sefa

@Sefa Es el carácter Unicode para el símbolo matemático "divide" y Mathematica lo utiliza como operador para Divisible.
Martin Ender

Aquí hay uno en 41 Bytes: Cases[Range[#^3],x_/;x^2∣(7^x-1)][[#]]&basado en el argumento heurístico de que n ^ 3 es un límite superior. He descubierto una prueba realmente maravillosa de esto, que este margen es demasiado estrecho para contener :)
Kelly Lowder

2

PARI / GP , 42 bytes

Muy claro. 1 indexado, aunque esto podría cambiarse fácilmente.

n->=k=1;while(n--,while((7^k++-1)%k^2,));k

o

n->=k=1;for(i=2,n,while((7^k++-1)%k^2,));k


1

R, 35 bytes

Esto solo funciona para n<=8.

z=1:20;which(!(7^z-1)%%z^2)[scan()]

Sin embargo, aquí hay una versión más larga que funciona n<=25para 50 bytes :

z=1:1e6;which(gmp::as.bigz(7^z-1)%%z^2==0)[scan()]

¿Esto solo funciona 8porque se convierte en un int largo?
George

1
@george Sí, pierde precisión ya que R está predeterminado en enteros de 32 bits. La segunda versión del código usa un paquete gmpque permite enteros arbitrariamente grandes. Sin embargo, rápidamente me quedo sin RAM para calcular cualquier cosa anterior n=25.
rturnbull

0

PHP, 47 49 bytes

while($n<$argv[1])$n+=(7**++$x-1)%$x**2<1;echo$x;

Solo funciona para n <9 ( 7**9es más grande que PHP_INT_MAXcon 64 bits)

62 bytes usando enteros de longitud arbitraria: (no probado; PHP en mi máquina no tiene bcmath)

for($x=$n=1;$n<$argv[1];)$n+=bcpowmod(7,++$x,$x**2)==1;echo$x;

Corre con php -nr '<code>' <n> .

pseudocódigo

implicit: $x = 0, $n = 0
while $n < first command line argument
    increment $x
    if equation is satisfied
        increment $n
print $x

0

Pyke, 10 bytes

~1IX7i^tR%

Pruébalo aquí!

~1         -  infinite(1)
  IX7i^tR% - filter(^, not V)
    7i^    -    7**i
       t   -   ^-1
        R% -  ^ % v
   X       -   i**2
           - implicit: print nth value

0

Clojure , 83 bytes

(fn[n](nth(filter #(= 0(rem(-(reduce *(repeat % 7N))1)(* % %)))(iterate inc 1N))n))

Pruébalo en línea!

Esto crea una lista infinita de Java BigIntegers que comienza en 1 y los filtra por definición. Utiliza la indexación de base cero para seleccionar el n º valor de la lista filtrada.


0

Perl 5, 35 Bytes

Bueno, esto faltaba, así que aquí está:

map{$_ if!((7**$_-1)%($_**2))}1..<>


0

Powershell, demasiados bytes

Solo para ver si era posible y lo es.

[System.Linq.Enumerable]::Range(1,10000)|?{[System.Numerics.BigInteger]::Remainder([System.Numerics.BigInteger]::Pow(7,$_)-1,$_*$_) -eq 0}

0

Perl 6 , 35 34 bytes

{grep({(7**$_-1)%%$_²},^∞)[$_]}

0 indexado.

Afeitado un byte gracias a Brad Gilbert.


grep es una subrutina, por lo que puede eliminar el espacio si coloca los parens después de él{grep(…)}
Brad Gilbert b2gills

0

QBIC , 39 bytes

:{~(7^q-1)%(q^2)=0|b=b+1]~b=a|_Xq\q=q+1

No pude ejecutarlo en QBasic 4.5, pero parece funcionar bien en QB64. Por alguna razón inexplicable, QBasic se niega a dividir limpiamente 13,841,287,200 por 144, pero en cambio da un resto de -128. Luego devuelve 16 como el séptimo término de esta secuencia en lugar de 12 ...

:{      get N from the command line, start an infinite DO-loop
~       IF
(7^q-1) Part 1 of the formula (Note that 'q' is set to 1 as QBIC starts)
%       Modulus
(q^2)   The second part
=0      has no remainder
|b=b+1  Then, register a 'hit'
]       END IF
~b=a    If we have scored N hits
|_Xq    Quit, printing the last used number (q)
\q=q+1  Else, increase q by 1. 
        [DO-loop and last IF are implicitly closed by QBIC]

0

Maravilla , 28 bytes

@:^#0(!>@! % - ^7#0 1^#0 2)N

Indexado a cero. Uso:

(@:^#0(!>@! % - ^7#0 1^#0 2)N)2

Filtra de la lista de números naturales con un predicado que determina si x^2es divisible por 7^x-1, luego obtiene el enésimo elemento en esa lista.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.