Dado un número n >= 2
, genera todos los enteros positivos menos que n
donde gcd(n, k) == 1
(con k
cualquiera de los números de salida). Los números de este tipo son coprimos entre sí.
Ejemplo: 10
da la salida [1, 3, 7, 9]
(en cualquier forma que desee, siempre y cuando los números estén separados inequívocamente y en algún tipo de lista). La lista no puede tener entradas duplicadas y no tiene que ser ordenada.
Más casos de prueba:
2 -> [1]
3 -> [1, 2]
6 -> [1, 5]
10 -> [1, 3, 7, 9]
20 -> [1, 3, 7, 9, 11, 13, 17, 19]
25 -> [1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24]
30 -> [1, 7, 11, 13, 17, 19, 23, 29]
Tampoco estamos contando los números anteriores n
que son primos n
, solo porque estoy bastante seguro de que hay soluciones infinitas.
También tenga en cuenta: los números que son primos entre sí también se dice que son relativamente primos o mutuamente primos entre sí.
code-golf
math
number-theory
primes
Rɪᴋᴇʀ
fuente
fuente
1\n3\n
. Ej. ) Cuentan como salida válida?Respuestas:
Jalea , 3 bytes
Pruébalo en línea!
¿Como funciona esto?
Prueba de validez
Dado que queremos extraer sólo los coprimes, el valor mínimo de la lista grande-Common-divisores tiene que ser 1 para el
ÐṂ
truco para el trabajo. Probemos eso (en dos métodos diferentes):Dos enteros positivos consecutivos son siempre coprimos. Considere , con . Luego tomamos otro entero positivo tal que y . y = x + 1 k k ∣ x k ∣ yx,y∈Z∗ y=x+1 k k∣x k∣y
Esto implica que , entonces , por lo tanto . El único entero positivo para dividir es sí mismo, por lo que se garantiza que aparecerá en la lista y siempre será el valor mínimo.k ∣ ( x + 1 - x ) k ∣ 1 1 1k∣(y−x) k∣(x+1−x) k∣1 1 1
fuente
ÐṂ
existía en ese entonces, de todos modos estoy bastante satisfecho con este.DṂ
existía, pero solo funcionó para las mónadas. La confirmación implementadoÞ
,ÐṂ
,ÐṀ
para diadas con fecha 9 de mayo de 2017.Python 2 ,
6147 bytesPruébalo en línea!
Antecedentes
Considere el anillo . Si bien este anillo generalmente se define usando las clases de residuos módulo , también se puede considerar como el conjunto , donde los operadores de suma y multiplicación se definen por y , donde , significan la adición habitual, multiplicación y operadores de módulo sobre los enteros.n Z n = { 0 , … , n - 1 } a + n b = ( a + b )(Zn,+n,⋅n) n Zn={0,…,n−1} a ⋅ n b = a ⋅ ba+nb=(a+b)%n + ,a⋅nb=a⋅b%n +,⋅, and %
Dos elementos y de se llaman inversos multiplicativos mutuos módulo si . Tenga en cuenta que siempre que .b Z n n a ⋅ n b = 1a b Zn n 1a⋅nb=1%n n > 11%n=1 n>1
Arregle y deje que sea un coprimo de en . Si para dos elementos e de , tenemos que . Esto implica que , y seguimos que , es decir, divide manera uniforme. Como no comparte divisores primos con , esto significa que . Finalmente porquea n Z n a ⋅ n x = a ⋅ n y x y Z n a ⋅ xn>1 a n Zn a⋅nx=a⋅ny x y Zn a ⋅ ( x - y )a⋅x%n=a⋅y%n n ∣ a ⋅ ( x - y ) n a ⋅ ( x - y ) n a n ∣ x - y - n < x - y < n x = y a ⋅ n 0 , ... , a ⋅ n ( n - 1 ) Z n Z n n 1 b Za⋅(x−y)%n=a⋅x%n−a⋅y%n=0 n∣a⋅(x−y) n a⋅(x−y) n a n∣x−y −n<x−y<n , concluimos que . Esto muestra que los productos son todos elementos diferentes de . Como tiene exactamente elementos, uno (y exactamente uno) de esos productos debe ser igual a , es decir, hay una única en tal que .x=y a⋅n0,…,a⋅n(n−1) Zn Zn n 1 b a ⋅ n b = 1Zn a⋅nb=1
Por el contrario, arregle y deje que sea un elemento de que no sea coprimo para . En este caso, hay un primer tal que y . Si admitidos un módulo inverso multiplicativo (llamémoslo ), tendríamos que , lo que significa que y, por lo tanto, , entonces . Desde , seguimos quea Z n n p p ∣ a p ∣ n a n b a ⋅ n b = 1 a ⋅ bn>1 a Zn n p p∣a p∣n a n b a⋅nb=1 ( a ⋅ b - 1 )a⋅b%n=1 n ∣ a ⋅ b - 1 p ∣ a p ∣ a ⋅ b p ∣ n p ∣ a ⋅ b - 1 p ∣ ( a ⋅ b ) - ( a ⋅ b - 1 ) = 1 p(a⋅b−1)%n=a⋅b%n−1=0 n∣a⋅b−1 p∣a p∣a⋅b . Por otro lado, desde , también seguimos que . De esta manera, , lo que contradice la suposición de que es un número primo.p∣n p∣a⋅b−1 p∣(a⋅b)−(a⋅b−1)=1 p
Esto demuestra que las siguientes afirmaciones son equivalentes cuando .n>1
na y son primos entre sí.n
na admite un módulo inverso multiplicativo .n
na admite un módulo inverso multiplicativo único .n
Cómo funciona
Para cada par de enteros y en , el entero es único; de hecho, y son cociente y el resto de dividido por , es decir, dado , podemos recuperar y , donde denota enteros división. Finalmente, dado que y , es un elemento de ; de hecho, .b Z n k : = a ⋅ n + b a b k n k a = k / n b = ka b Zn k:=a⋅n+b a b k n k a=k/n / a ≤ n - 1 b ≤ n - 1 k Z n 2 k ≤ ( n - 1 ) ⋅ n + ( n - 1 ) = n 2 - 1b=k%n / a≤n−1 b≤n−1 k Zn2 k≤(n−1)⋅n+(n−1)=n2−1
Como se ha señalado anteriormente, si y son primos entre sí, no habrá un único de tal manera que , es decir, habrá un único tal que y , por lo que la lista generada contendrá exactamente una vez.n b a ⋅ ba n b a⋅b%n=1 k k/n=a k/n⋅k%n=(k/n)⋅(k%n)%n=1 a
A la inversa, si y son no primos entre sí, la condición será falsa para todos los valores de tal que , por lo que la lista generada será no contener .a n k/n⋅k%n=1 k a=k/n a
Esto prueba que la lista que devuelve el lambda contendrá todos los coprimes de en exactamente una vez.Z nn Zn
fuente
Jalea , 4 bytes
Pruébalo en línea!
Cómo funciona
fuente
gRỊT
ÐṂ
) para obtener 3 bytes .Mathematica, 25 bytes
Formato de salida ligeramente extraño, donde cada resultado se envuelve en una lista separada, por ejemplo
{{1}, {3}, {7}, {9}}
. Si eso no está bien, tengo dos soluciones en 30 bytes:Mathematica realmente tiene
CoprimeQ
pero eso es demasiado tiempo.fuente
Q
significa enCoprimeQ
?EvenQ
,PrimeQ
oSubsetQ
.2sable , 4 bytes
Código:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
Python,
938274 bytesf
verifica recursivamente los coprimos y la segunda lambda los genera. Emite una lista.fuente
En realidad , 8 bytes
Pruébalo en línea!
Explicación:
fuente
range(1, n)
si eso ahorra bytes.R
(range(1, n+1)
) yr
(range(n)
). Como son equivalentes, elegíR
(ya que accidentalmente presioné el bloqueo de mayúsculas mientras escribía el código).MATL , 7 bytes
Pruébalo en línea!
fuente
MATLAB / Octave, 22 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
6461 bytesGuardado 3 bytes gracias a @ user81655
Fragmento de prueba
fuente
a==
cona<2
?a
podría ser 0 en algún momento. Tendré que verificarfilter
para eliminar la necesidad de recibir unb
parámetro:...keys()].filter(b=>(g=a=>b?g(b,b=a%b):a<2)(n))
Medusa ,
1918 bytesEsto funciona calculando la factorización prima de cada número en el rango y verificando si se cruza con la entrada (Jellyfish aún no tiene un mcd incorporado). Por razones de golf, la salida es en orden descendente. Pruébalo en línea!
Explicación
En primer lugar,
i
se evalúa la entrada; para entrada10
, el valor de lai
celda es10
.Aquí
r
(rango) se aplica a la entrada y 1. Como la entrada es mayor que 1, el rango está en orden descendente; para entrada10
, esto da[9 8 7 6 5 4 3 2 1]
.Esta parte es una gran función, que se evalúa
i
y el rango anterior.Intersección (
n
) de factores primos (x
).Esta vacio? (
N
)Subproceso al nivel 0, probando para cada elemento del rango.
Filtre (
#
) el rango con respecto a esta lista de booleanos. La función producida por[
quiere usar el argumento#
como su propio argumento, por lo que ponemos unB
bloque para que#
no obtenga ningún argumento. De lo contrario, el valor de la~
celda se utilizaría como argumento de la gran función. Finalmente,p
imprime el resultado.fuente
Apilado, no competitivo,
2421 bytesGuardado 3 bytes, inspirado en el rubí de Borsunho . (
1 eq
a2<
)Pruébalo aquí!
Esta es una n-lambda que toma un solo argumento y produce la matriz.
fuente
keep
no estaba funcionando bien.CJam , 14 bytes
Pruébalo en línea!
Explicación
No necesitamos verificar todos los divisores posibles
a
yb
probar si son coprimos. Es suficiente mirar si alguno de los factores primos de lab
divisióna
.fuente
Mathematica, 26 bytes
fuente
Perl 6 , 20 bytes
fuente
Brachylog ,
1613 bytesEsta es una función que toma N como entrada y genera todos los enteros menos que y coprimos.
Pruébalo en línea! Como suele ser el caso en Brachylog, se ha agregado un código adicional para convertir la función en un programa completo; El intérprete de Brachylog, si se le da una función en lugar de un programa completo, lo ejecutará pero no imprimirá la salida, lo que significa que realmente no puede observar su funcionamiento.
Explicación:
Un programa Brachylog es una cadena de restricciones; típicamente, el LHS de una restricción es el RHS de la siguiente.
Disminuyó tres caracteres al darse cuenta de que no hay razón para verificar si el factor común (que ya se sabe que es un factor primo de la salida) es un factor primo de la entrada. Ya sabemos que es primo, por lo que podemos verificar si es un factor. Estoy gratamente sorprendido aquí que
:A*?
no envía al intérprete a un bucle infinito y no permite un valor no entero para A , pero como el intérprete hace lo que quiero, lo tomaré.fuente
Dyalog APL, 10 bytes .
Explicación (entrada
n
):fuente
⍨
Japt
-f
,9852 bytesIntentalo
fuente
o f_jU
j
que también se puede usar para probar si 2 números son primos.Mathematica, 33 bytes
Contiene U + F4A1
fuente
Haskell, 27 bytes
Pruébalo en línea!
fuente
Julia 0.5 , 23 bytes
Pruébalo en línea!
fuente
memes , 11 bytes no competitivos , obsoletos
No competitiva ya que la iteración de STDIN es nueva. Utiliza codificación UTF-8.
Explicación:
}
accede al siguiente elemento de entrada, pero la última entrada se enlaza cuando se proporciona, por lo que la entrada6
dará como resultado6 6 6 6 6 ...
STDIN, lo que hace posible leer dos salidas de una.fuente
05AB1E , 3 bytes
Pruébalo en línea!
Tiene nuevas funciones.
fuente
Rubí,
3634Es cierto que esta no es una respuesta muy inspirada .
2 bytes guardados gracias a Conor O'Brien.
fuente
(n)
Python 3 , 60 bytes
Importa gcd en lugar de escribir una nueva lambda para él. Sugerencias de golf bienvenidas. Pruébalo en línea!
fuente
Julia, 30 bytes
Función anónima.
filter
elimina elementos de una lista que no son verdaderos según una función.En este caso, la función es
x->(gcd(n,x)<2)
(verdadera si el mcd de la entrada y el elemento de la lista es menor que 2). La lista es el rango1:n
.fuente
PARI / GP , 27 bytes
Utiliza la notación de conjunto presentada en la versión 2.6.0 (2013). En versiones anteriores, se necesitaban cuatro bytes más:
sería necesario.
fuente
[1..n]
), verifique si gcd es 1 (gcd(n,k)<2
), devuelva los números con esta propiedad. Esta->
es la notación de función / cierre, más corta en 2 bytes que la sintaxis de función normal y[...|...<-...,...]
es la notación establecida explicada en la respuesta (consulte la sección 2.3.14 en el Manual del usuario, o busque<-
).05AB1E , 4 bytes
Pruébalo en línea!
Cómo funciona
fuente
C (gcc) , 54 bytes
Este es un puerto de mi respuesta de Python .
Pruébalo en línea!
fuente
Pyth , 5 bytes
Pruébalo en línea!
Cómo funciona
Tenga en cuenta que Pyth usa indexación 0.
fuente