MATL , 25 bytes

2

MATL , 25 bytes

Esto funciona para entradas de hasta 16:

10,i:^9/Y[t0)Yftb!w\~s1=)

La siguiente versión usa 31 bytes y funciona hasta 18. Para 19ello requiere aproximadamente 4 GB de memoria (no he podido ejecutarlo).

10,i:^9/Y[t0)5X2Y%Yfotb!w\~s1=)

Ejemplo

>> matl
 > 10,i:^1-,9/t0)5X2Y%Yfotb!w\~s1=)
 > 
> 6
7 13

Explicación

Considere la entrada de concreción 6. Primero 111111se calculan los divisores primos de ; en este caso los resultados son 3, 7, 11, 13, 37. A continuación, se calcula la operación de módulo (división con resto) para todas las combinaciones de números 1, 11, ... 111111y los divisores computados. Esto explota la expansión singleton implícita de MATL. El resultado es en este caso una matriz 6x 5, con cada columna correspondiente a uno de los divisores. Los divisores (columnas) aceptados son aquellos para los que solo el 1valor (es decir, el último) da cero resto.

10,i:^9/Y[   % generate vector with `1`, `11`, ... depending on input number, say "n"
t0)          % pick the last element: `111...1` (n ones)
5X2Y%        % * convert to uint64, so that larger numbers can be handled
Yf           % prime factors                                             
o            % * convert to double precision, so that modulus can be done
t            % duplicate                                                 
b            % bubble up element in stack                                
!            % transpose                                                 
w            % swap elements in stack                                    
\            % modulus after division (element-wise, singleton expansion)
~s           % number of zero values in each column
1=           % is equal to 1? (element-wise, singleton expansion)
)            % index divisors with that logical index

(*) Eliminado en versión corta

Luis Mendo
fuente
Esa es una forma inteligente de hacerlo.
AdmBorkBork

Respuestas:

2

Julia, 103 bytes

R(n)=[keys(factor((10^n-19))...]
n->(r=R(n);isprime(r)?r:setdiff(r,reduce(vcat,[R(i)for i=1:n-1])))

Esta es una función sin nombre que llama a una función auxiliar R. Para llamarlo, asigne un nombre a la función principal, p f=n->.... Ej .

Sin golf:

function R(n::Integer)
    collect(keys(factor((10^n - 1) ÷ 9)))
end

function f(n::Integer)
    r = R(n)
    if isprime(r)
        r
    else
        setdiff(r, reduce(vcat, [R(i) for i = 1:n-1]))
    end
end
Alex A.
fuente
2

LabVIEW, 33 primitivas de LabVIEW

19 toma para siempre ...

Trabaje guardando todos los Primes y eliminando elementos del último conjunto cuando se encuentren en la otra matriz.

Eumel
fuente
1

J, 24 bytes

[:({:-.}:)@:q:[:+/\10^i.

Espera números de precisión extendida después de 6 (por ejemplo, en 19xlugar de 19).

Pruébalo en línea!

Probablemente haya una forma más corta de generar las repunidades que también evite las mayúsculas.

Explicación

[: ({: -. }:) @: q: [: +/\ 10 ^ i.
                                i. Range [0, input)
                           10 ^    10 raised to the power of the range
                       +/\         Running sum of this list (list of repunits)
                 q:                Prime factors of the repunits
              @:                   Composed with
   ({: -. }:)                      Unique prime factors of last repunit
    {:                              Factors of last repunit (tail of matrix)
       -.                           Set subtraction with
          }:                        Rest of the matrix (curtail)

Cómo funciona visualmente

Creo que este tipo de explicaciones visuales son más fáciles de soportar para aquellos que no conocen J. Estos son resultados del REPL.

   10 ^ i.6
1 10 100 1000 10000 100000

   +/\ 10 ^ i. 6
1 11 111 1111 11111 111111

   q: +/\ 10 ^ i. 6
 0   0  0  0  0
11   0  0  0  0
 3  37  0  0  0
11 101  0  0  0
41 271  0  0  0
 3   7 11 13 37

   ({: -. }:) q: +/\ 10 ^ i. 6
7 13
col
fuente