Các yếu tố chính của tiểu thuyết


20

Bối cảnh

Mọi người đang nói về yếu tố chính trong trò chuyện và chúng tôi thấy mình đang nói về việc trả tiền. Repunits là một tập hợp con của các số được gọi là repdigits, là các số chỉ bao gồm các chữ số lặp lại, như 222hoặc 4444444444444444, nhưng repunits chỉ bao gồm 1.

Do đó, đôi vợ chồng repunits đầu tiên là 1, 11, 111, vv Đây là gọi bằng R n , do đó R 1 = 1, R 2 = 11, vv, và được tạo ra bởi công thức R(n) = (10^n - 1)/9, với n > 0.

Hệ số nguyên tố của các số repunit này theo trình tự A102380 trong OEIS. Ví dụ:

R 1 = 1
R 2 = 11
R 3 = 111 = 3 * 37
R 4 = 1111 = 11 * 101
R 5 = 11111 = 41 * 271
R 6 = 111111 = 3 * 7 * 11 * 13 * 37
R 7 = 111111 = 239 * 4649
...

Các thách thức

Viết một chương trình hoặc chức năng mà khi đưa ra một số nguyên đầu vào n với n >= 2qua STDIN hoặc tương đương , kết quả đầu ra hoặc trả về cuốn tiểu thuyết thừa số nguyên tố cho R n , trong bất kỳ định dạng thuận tiện. "Thừa số nguyên tố Novel" ở đây có nghĩa là tất cả các xnơi xlà một yếu tố chính của R n , nhưng xkhông phải là một yếu tố quan trọng đối với bất kỳ trước R k , với 1 <= k < n(ví dụ, nếu chúng ta viết thừa số nguyên tố cho tất cả R theo thứ tự, chúng tôi đã không nhìn thấy xtrước).

Các ví dụ

Input: 6
Output: 7, 13
(because 3, 11, and 37 are factors of a smaller R_k)

Input: 19
Output: 1111111111111111111
(because R_19 is prime, so no other factors)

Input: 24
Output: 99990001
(because 3, 7, 11, 13, 37, 73, 101, 137, 9901 are factors of a smaller R_k)

Input: 29
Output: 3191, 16763, 43037, 62003, 77843839397
(because no factors of R_29 are also factors of a smaller R_k)

Các tiện ích mở rộng:

  • Mã của bạn có thể làm bất cứ điều gì hoặc không có gì nếu n < 2.
  • Bạn có thể giả định một giới hạn trên "hợp lý" cho nđể thử nghiệm và mục đích thực - mã của bạn sẽ không được dự kiến để đầu ra cho n = 10000000, ví dụ, nhưng thuật toán của bạn nên làm việc cho một trường hợp như vậy nếu có khả năng tính toán không giới hạn và thời gian.
  • Đây là một trang web dành riêng cho các yếu tố của tiền thưởng để tham khảo.
  • Tôi chưa trải qua toán học, nhưng tôi đề xuất một giả thuyết rằng mọi n đều có kết quả riêng biệt cho thuật toán này - nghĩa là, không có n tồn tại sao cho R n không có yếu tố mới lạ. Tôi sẽ cung cấp tiền thưởng 250 điểm nếu ai đó chứng minh hoặc từ chối điều đó trong câu trả lời của họ. Thomas Kwa đề xuất một bằng chứng thanh lịch , và tôi đã trao tiền thưởng.

Tích hợp kiểm tra chính và yếu tố là trò chơi công bằng?
Martin Ender

@ MartinBüttner Không hạn chế.
admBorkBork


@alephalpha Vì tất nhiên có liên kết OEIS ;-) Cảm ơn!
admBorkBork

Câu trả lời:


5

Bình thường, 16 14 13 byte

-F_m{P/^Td9SQ

Như tôi có thể nói, 19 mất mãi mãi.

-F_m{P/^Td9SQ      Implicit: Q = input
           SQ      Inclusive range 1 to Q
                        Implicit lambda d:
    {P                  unique primes dividing
       ^Td              10**d
      /   9                  //9
   m               map lambda over the range
   m{P/^Td9SQ      Unique prime factors of all repunits up to the Qth
  _                Reverse the list
-F                 Reduce by set difference

Hãy thử nó ở đây .


Nếu bạn chạy nó từ dòng lệnh và đã cài đặt SymPy, 19 sẽ hoàn thành trong một giây. Cái đầu tiên mất hơn 2 giây là đầu vào 38.
isaacg

12

Bằng chứng là mọi khoản bồi thường đều có yếu tố chính mới lạ

Sử dụng Định lý Zsigmond , chứng minh rất đơn giản. Từ Wikipedia:

Trong lý thuyết số, định lý Zsigmondy, được đặt tên theo Karl Zsigmondy, nói rằng nếu a> b> 0 là các số nguyên cộng, thì với bất kỳ số nguyên n ≥ 1 nào , có một số nguyên tố p (được gọi là ước số nguyên tố nguyên thủy) chia một n - b n và không chia a k - b k cho bất kỳ số nguyên dương k <n nào , với các ngoại lệ sau: [những điều không áp dụng ở đây].

Hãy xem xét các khoản bồi thường lần 9: nghĩa là 10 n -1 . Theo Định lý của Zsigmond với a = 10 , b = 1 , có một số nguyên tố p | 10 n -1 không chia 10 k -1 , k <n .

  • p là số nguyên tố và 10 n -1 = 9 · R n , nên nó phải chia 9 hoặc R n .

  • p không thể chia 9 , vì 9 = 10 1 -1 .

  • Do đó p chia R n .

  • p không thể chia bất kỳ R k nào , vì nó không chia 10 k -1 = 9 · R k .

Do đó, p từ Định lý Zsigmond là một yếu tố chính mới lạ của bất kỳ R n , n 2 . ■


Một ví dụ về một yếu tố chính tiểu thuyết lặp đi lặp lại

Số nguyên tố 487 là hệ số nguyên tố lặp lại của R 486 :

Theo định lý Fermat-Euler, 10 487-1 1 (mod 487) . Thứ tự của 10 mod 487, nghĩa là, công suất nhỏ nhất của 10 là 1 mod 487, do đó phải là ước của 486. Trên thực tế, thứ tự bằng 486. Điều đó cũng xảy ra không chỉ là 10 486 1 (mod 487) , đó cũng là 1 (mod 487 2 ) .

Xem ở đây rằng thứ tự của 10 mod 487 là 486; nghĩa là, 10 k -1 không nhỏ hơn chia hết cho 487. Rõ ràng, 487 không chia 9, vì vậy nó phải chia R 486 .


6

CJam, 18 byte

{{)'1*imf}%W%:-_&}

Kiểm tra nó ở đây.

Bắt đầu từ 19 (lần hoàn trả đầu tiên sau 2) sẽ mất một thời gian khá dài.

Giải trình

Đây là một khối chưa được đặt tên (tương đương với chức năng của CJam), dự kiến ​​số đầu vào ntrên ngăn xếp và để lại danh sách các thừa số nguyên tố thay thế:

{      e# Map this block over [0 1 ... n-1]...
  )'1* e#   Increment and create a string of that many 1s.
  i    e#   Convert to integer.
  mf   e#   Get its prime factors.
}%
W%     e# Reverse the list.
:-     e# Fold set difference onto the list, removing from the first list the elements of
       e# all other lists.
_&     e# Remove duplicates. Unfortunately, this necessary. Thomas Kwa found that the 486th
       e# repunit contains 487^2 (where 487 is a novel prime factor).

3
Có phải ... bạn đã nghiêm túc chỉ chơi golf từ 20 đến 16 trong ba phút vừa qua? >.>
admBorkBork

@TimmyD Sắp xếp ... Tôi phải lên tới 18 lần nữa, vì hóa ra mã của tôi dựa trên một giả định mà tôi không thể chứng minh hoặc từ chối ngay bây giờ.
Martin Ender

Ôi, đó là một trường hợp thú vị - nhân tố tiểu thuyết trùng lặp. Bắt đẹp.
admBorkBork

4

Haskell 86 byte

import Data.Numbers.Primes
f n=[x|x<-primeFactors$div(10^n-1)9,notElem x$f=<<[1..n-1]]

Ví dụ sử dụng: f 8-> [73,137].

Mất rất nhiều thời gian và trí nhớ cho lớn n.

Thực hiện trực tiếp định nghĩa: lấy tất cả các yếu tố xchính Rnkhông xuất hiện trước đó ( f=<<[1..n-1]đều là các yếu tố chính của R1 ... R(n-1)).


3

Toán học 82 74 63 byte

Với 11 byte được lưu nhờ alephalpha.

Complement@@Reverse@FactorInteger[(10^Range@#-1)/9][[;;,;;,1]]&

Các yếu tố chính của R70

(10 ^ 70 - 1) / 9 = 11111111111111111111111111111111111111111111111111111111111111111111111111

FactorInteger[(10^70 - 1)/9]

{{11, 1}, {41, 1}, {71, 1}, {239, 1}, {271, 1}, {4649, 1}, {9091, 1}, {123551, 1}, { 909091, 1}, {4147571, 1}, {102598800232111471, 1}, {265212793249617641, 1}}


Các yếu tố chính của tiểu thuyết R70

Complement@@Reverse@FactorInteger[(10^Range@#-1)/9][[;;,;;,1]]&[70]

{4148571, 265212793249617641}


Complement@@Reverse@FactorInteger[(10^Range@#-1)/9][[;;,;;,1]]&
alephalpha

Vui lòng giải thích ý nghĩa của [[;;,;;,1]]hay [[1 ;; All, 1 ;; All, 1]]. Tôi hoang mang!
DavidC

@DavidCarraher Nó lấy phần tử đầu tiên của mọi phần tử của mọi phần tử của danh sách.
LegionMammal978

@DavidCarraher [[;;,;;,1]]cũng giống như [[All,All,1]].
alephalpha

Bây giờ điều đó có ý nghĩa. BTW, vị trí lại của bạn Rangelà rất thông minh.
DavidC

2

MATL , 25 byte

Điều này hoạt động cho đầu vào lên đến 16:

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

Phiên bản sau sử dụng 31 byte và hoạt động tối đa 18. Đối với 19nó đòi hỏi khoảng 4 GB bộ nhớ (tôi không thể chạy nó).

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

Thí dụ

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

Giải trình

Xem xét cho đầu vào cụ thể 6. Đầu tiên các ước số nguyên tố 111111được tính toán; trong trường hợp này kết quả là 3, 7, 11, 13, 37. Sau đó, phép toán modulo (phần dư chia) được tính cho tất cả các tổ hợp số1 , 11, ... 111111và các ước tính. Điều này khai thác mở rộng đơn lẻ ngầm định của MATL. Kết quả là trong trường hợp này là một ma trận 6x 5, với mỗi cột tương ứng với một trong các ước. Các ước số được chấp nhận (các cột) là các 1giá trị mà chỉ giá trị (cụ thể là giá trị cuối cùng) không có giá trị còn lại.

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

(*) Đã xóa trong phiên bản ngắn


Đó là một cách làm thông minh.
admBorkBork

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

Đây là một hàm không tên gọi hàm helper R . Để gọi nó, đặt tên hàm chính, vd f=n->....

Ung dung:

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

2

LabVIEW, 33 LabVIEW Nguyên thủy

19 mất mãi mãi ...

Hoạt động bằng cách lưu tất cả các số nguyên tố và xóa các phần tử từ tập cuối cùng khi chúng được tìm thấy trong mảng khác.


1

J, 24 byte

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

Yêu cầu số chính xác mở rộng sau 6 (ví dụ 19xthay vì 19).

Hãy thử trực tuyến!

Có lẽ có một cách ngắn hơn để tạo ra các khoản bồi thường cũng tránh được giới hạn.

Giải trình

[: ({: -. }:) @: 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ách thức hoạt động, trực quan

Tôi nghĩ rằng những loại giải thích trực quan này dễ tiêu hóa hơn đối với những người không biết J. Đây là kết quả từ 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.