MATL , 25 Bytes

2

MATL , 25 Bytes

Dies funktioniert für Eingaben bis zu 16:

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

Die folgende Version verwendet 31 Bytes und funktioniert bis zu 18. Dafür 19werden ca. 4 GB Arbeitsspeicher benötigt (ich konnte es nicht ausführen).

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

Beispiel

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

Erläuterung

Bei der Eingabe der Konkretheit berücksichtigen 6. Zuerst werden die Hauptteiler von 111111berechnet; in diesem Fall sind die Ergebnisse 3, 7, 11, 13, 37. Dann wird die Modulo - Operation (Divisionsrest) wird für alle Kombinationen von Zahlen berechnet 1, 11... 111111und die berechneten Teilern. Dies nutzt die implizite Singleton-Erweiterung von MATL. Das Ergebnis ist in diesem Fall eine 6x- 5Matrix, wobei jede Spalte einem der Teiler entspricht. Akzeptierte Teiler (Spalten) sind diejenigen, für die nur der 1Wert (nämlich der letzte) den Rest Null ergibt.

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

(*) In Kurzfassung entfernt

Luis Mendo
quelle
Das ist eine clevere Art und Weise.
AdmBorkBork

Antworten:

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])))

Dies ist eine unbenannte Funktion, die eine Hilfsfunktion aufruft R. Um es aufzurufen, geben Sie der Hauptfunktion einen Namen, z f=n->....

Ungolfed:

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.
quelle
2

LabVIEW, 33 LabVIEW-Grundelemente

19 dauert ewig ...

Speichern Sie alle Primzahlen und löschen Sie Elemente aus der letzten Gruppe, wenn sie im anderen Array gefunden wurden.

Eumel
quelle
1

J, 24 Bytes

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

Erwartet Zahlen mit erweiterter Genauigkeit nach 6 (z . B. 19xstatt 19).

Probieren Sie es online!

Es gibt wahrscheinlich einen kürzeren Weg, um die Repunits zu generieren, der auch die Caps vermeidet.

Erläuterung

[: ({: -. }:) @: 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)

Wie es funktioniert, visuell

Ich denke, dass solche visuellen Erklärungen für diejenigen, die J nicht kennen, leichter zu ertragen sind. Dies sind Ergebnisse der 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
cole
quelle