Dado un número n >= 2, genera todos los enteros positivos menos que ndonde gcd(n, k) == 1(con kcualquiera de los números de salida). Los números de este tipo son coprimos entre sí.
Ejemplo: 10da 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 nque 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?
gÐṂ - (Monadic) Programa completo. g - Máximo divisor común. ÐṂ - Mantenga los elementos con un valor de enlace mínimo (es decir, aquellos con GCD == 1) Tenga en cuenta que esto crea automáticamente el rango [1, entrada] (inclusive).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
CoprimeQpero eso es demasiado tiempo.fuente
Qsignifica enCoprimeQ?EvenQ,PrimeQoSubsetQ.2sable , 4 bytes
Código:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
Python,
938274 bytesfverifica 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?apodría ser 0 en algún momento. Tendré que verificarfilterpara eliminar la necesidad de recibir unbpará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,
ise evalúa la entrada; para entrada10, el valor de laicelda 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
iy 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 unBbloque 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,pimprime el resultado.fuente
Apilado, no competitivo,
2421 bytesGuardado 3 bytes, inspirado en el rubí de Borsunho . (
1 eqa2<)Pruébalo aquí!
Esta es una n-lambda que toma un solo argumento y produce la matriz.
fuente
keepno estaba funcionando bien.CJam , 14 bytes
Pruébalo en línea!
Explicación
No necesitamos verificar todos los divisores posibles
aybprobar si son coprimos. Es suficiente mirar si alguno de los factores primos de labdivisió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_jUjque 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 entrada6dará 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.
filterelimina 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