MATL , 25 byte

2

MATL , 25 byte

Ini berfungsi untuk input hingga 16:

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

Versi berikut menggunakan 31 byte dan berfungsi hingga 18. Untuk 19itu membutuhkan sekitar 4 GB memori (saya belum bisa menjalankannya).

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

Contoh

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

Penjelasan

Pertimbangkan untuk masukan konkret 6. Pertama, pembagi utama dari 111111dihitung; dalam hal ini hasilnya 3, 7, 11, 13, 37. Maka operasi modulo (divisi sisa) dihitung untuk semua kombinasi angka 1, 11, ... 111111dan pembagi dihitung. Ini mengeksploitasi ekspansi tunggal implisit MATL. Hasilnya adalah dalam kasus ini 6x 5matriks, dengan masing-masing kolom sesuai dengan salah satu pembagi. Pembagi yang diterima (kolom) adalah yang hanya 1bernilai (yaitu yang terakhir) yang memberikan sisa nol.

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

(*) Dihapus dalam versi pendek

Luis Mendo
sumber
Itu cara yang cerdas untuk melakukannya.
AdmBorkBork

Jawaban:

2

Julia, 103 byte

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

Ini adalah fungsi tanpa nama yang memanggil fungsi pembantu R. Untuk memanggilnya, beri nama fungsi utama, misalnya f=n->....

Tidak Terkumpul:

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

LabVIEW, 33 LabVIEW Primitif

19 membutuhkan selamanya ...

Bekerja dengan menyimpan semua Primes dan menghapus elemen dari set terakhir ketika mereka ditemukan di array lain.

Eumel
sumber
1

J, 24 byte

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

Mengharapkan angka-angka presisi-diperpanjang setelah 6 (misalnya 19xbukannya 19)

Cobalah online!

Mungkin ada cara yang lebih pendek untuk menghasilkan imbalan yang menghindari batasan juga.

Penjelasan

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

Cara kerjanya, secara visual

Saya pikir penjelasan visual semacam ini lebih mudah diterima oleh mereka yang tidak tahu J. Ini adalah hasil dari 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
sumber