Con kiến


50

"Con kiến" là một động vật cố chấp điều hướng các số nguyên và phân chia chúng cho đến khi chỉ còn lại các số nguyên tố!


Ban đầu, chúng ta có một mảng A vô hạn chứa tất cả các số nguyên> = 2: [2,3,4,5,6,.. ]

Hãy plà vị trí của con kiến ​​trên mảng. Ban đầu, p = 0(mảng là 0-index)

Mỗi lượt, con kiến ​​sẽ di chuyển như sau:

  • nếu A[p]là số nguyên tố, con kiến ​​di chuyển đến vị trí tiếp theo:p ← p+1
  • khác, nếu A[p]là một số tổng hợp, hãy qlà ước số nhỏ hơn của nó> 1. Chúng ta chia A[p]cho qvà chúng ta thêm qvào A[p-1]. Con kiến ​​di chuyển đến vị trí trước:p ← p-1

Dưới đây là những động thái đầu tiên cho loài kiến:

 2  3  4  5  6  7  8  9  ... 
 ^
 2  3  4  5  6  7  8  9  ... 
    ^
 2  3  4  5  6  7  8  9  ... 
       ^
 2  5  2  5  6  7  8  9  ... 
    ^
 2  5  2  5  6  7  8  9  ... 
       ^
 2  5  2  5  6  7  8  9  ... 
          ^
 2  5  2  5  6  7  8  9  ... 
             ^
 2  5  2  7  3  7  8  9  ... 
          ^

Chương trình của bạn sẽ xuất ra vị trí của kiến ​​sau khi ndi chuyển. (bạn có thể giả định n <= 10000)

Các trường hợp thử nghiệm:

0 => 0
10 => 6
47 => 9
4734 => 274
10000 => 512

Biên tập. bạn cũng có thể sử dụng danh sách 1 chỉ mục, có thể chấp nhận để hiển thị kết quả 1, 7, 10, 275, 513 cho trường hợp thử nghiệm ở trên.

Đây là mã golf, vì vậy mã có mã ngắn nhất tính bằng byte sẽ thắng.


32
Tôi thành thật nghĩ rằng có một con kiến ​​trên màn hình của tôi khi tôi nhìn thấy điều này trong Câu hỏi về mạng nóng.
Kodos Johnson

14
Tôi tự hỏi liệu trình tự được xác định rõ cho lớn tùy ý n(hoặc liệu trường hợp tổng hợp có thể đẩy con kiến ​​sang bên trái của ban đầu 2).
Martin Ender

1
@SuperChafouin vì vậy đầu ra của các trường hợp thử nghiệm có thể là: 1,7,10,275,513nếu 1 chỉ mục đã nêu? Hoặc họ vẫn sẽ cần phải phù hợp với đầu ra của bạn.
Tom Carpenter

12
@MartinEnder Một câu hỏi mở khác là liệu một số nguyên tố> 7 cuối cùng có thể bị bỏ lại phía sau mãi mãi không.
Arnauld

2
@Arnauld Ra xa như n = 1.000.000.000 (trong đó p = 17156661), mối quan hệ giữa n và p rất gần với p = n / (ln (n) * ln (ln (n))).
Chim cánh cụt

Câu trả lời:


11

Alice , 45 byte

/o
\i@/.&wqh!]k.&[&w;;?c]dt.n$k&;[.?~:![?+!kq

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

Chủ yếu là thực hiện đơn giản.

nThời gian lặp trong Alice thường được thực hiện bằng cách đẩy n-1thời gian địa chỉ trả về , sau đó quay lại vào cuối mỗi lần lặp với k. Lần cuối cùng qua vòng lặp, klệnh không có nơi nào để quay lại và thực hiện tiếp tục.

Chương trình này sử dụng cùng một khướng dẫn để dừng sớm khi số là số nguyên tố. Kết quả là, lần lặp cuối cùng sẽ luôn di chuyển con kiến ​​sang trái. Để bù đắp cho lỗi này, chúng tôi thực hiện các n+1bước lặp trên mảng 1 chỉ mục, cung cấp chính xác kết quả mà chúng tôi muốn (và cung cấp cho trường hợp n=0miễn phí).


7

Python 2 , 120 byte

p=0
A=range(2,input()+2)
for _ in A:
 for q in range(2,A[p]):
	if A[p]%q<1:A[p]/=q;p-=1;A[p]+=q;break
 else:p+=1
print p

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

Ah, vòng lặp hiếm for- else! Các elsekhoản chỉ thực hiện nếu forcơ thể được không thoát qua break. Trong trường hợp của chúng tôi, điều này có nghĩa là chúng tôi đã kiểm tra tất cả qvà không tìm thấy ai trong số họ để phân chia p.


7

Octave , 109 103 101 94 byte

function i=a(n)i=1;for l=z=2:n+1
if nnz(q=factor(z(i)))>1
z(i--)/=p=q(1);z(i--)+=p;end
i++;end

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

Mã này sẽ xuất vị trí trong chỉ mục 1, vì vậy đầu ra cho các trường hợp thử nghiệm là:

0 => 1
10 => 7
47 => 10
4734 => 275
10000 => 513

Phiên bản này sử dụng một số tối ưu hóa Octave nên không tương thích với MATLAB. Mã dưới đây là một phiên bản tương thích MATLAB.


MATLAB, 130 123 118 117 byte

function i=a(n)
z=2:n+1;i=1;for l=z
q=factor(z(i));if nnz(q)>1
z(i)=z(i)/q(1);i=i-1;z(i)=z(i)+q(1);else
i=i+1;end
end

Sử dụng lập chỉ mục 1 như với phiên bản Octave. Tôi đã thử nghiệm nó với tất cả các trường hợp thử nghiệm trong MATLAB. Ví dụ, đầu ra ở 100000 là 3675 (lập chỉ mục một).

Một phiên bản nhận xét của mã trên:

function i=a(n)
    z=2:n+1;                %Create our field of numbers
    i=1;                    %Start of at index of 1 (MATLAB uses 1-indexing)
    for l=1:n               %For the required number of iterations
        q=factor(z(i));     %Calculate the prime factors of the current element
        if nnz(q)>1         %If there are more than one, then not prime
            z(i)=z(i)/q(1); %So divide current by the minimum
            i=i-1;          %Move back a step
            z(i)=z(i)+q(1); %And add on the minimum to the previous.
        else
            i=i+1;          %Otherwise we move to the next step
        end
    end

Là một vấn đề đáng quan tâm, đây là vị trí của kiến ​​so với số lần lặp cho 10000 giá trị đầu tiên của n.

Vị trí kiến

Có vẻ như Kiến có thể sẽ có xu hướng vô cùng, nhưng ai biết được, ngoại hình có thể bị đánh lừa.


  • MATLAB: Đã lưu 6 byte forthay vì whilevà xóa dấu ngoặc khỏi if- Cảm ơn @Giuseppe
  • MATLAB: Lưu 2 byte - Cảm ơn @Sanchises
  • Octave: Lưu 10 byte bằng cách sử dụng Octave \=và các +=thao tác - Cảm ơn @Giuseppe
  • Octave: Lưu 2 byte với i++i--- Cảm ơn @LuisMendo
  • Octave: Lưu 7 byte - Cảm ơn @Sanchises

Để làm cho nó hoạt động trên TIO, tôi nghĩ bạn cần phải endkhớp với chữ ký hàm
Giuseppe

@Giuseppe À, ok. Trong MATLAB, trailing endlà tùy chọn.
Tom Carpenter

bạn có thể tạo chức năng ẩn danh bằng cách sử dụng @ (n) khi bắt đầu thay vì sử dụng chức năng i = a (n)
Michthan

@Michthan không thể làm điều đó trong MATLAB. Tôi không nghĩ rằng nó có thể ở Octave vì nó có các vòng lặp?
Tom Carpenter

1
Các trailing endlà tùy chọn trong Octave quá. Ở đây chỉ cần thiết vì bạn có mã sau hàm
Luis Mendo

6

JavaScript (ES6), 91 byte

f=(n,a=[p=0])=>n--?f(n,a,(P=n=>++x<n?n%x?P(n):a[a[p]/=x,--p]+=x:p++)(a[p]=a[p]||p+2,x=1)):p

Bản giới thiệu

Lưu ý: Bạn có thể phải tăng kích thước ngăn xếp mặc định của động cơ để vượt qua tất cả các trường hợp thử nghiệm.

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


6

Haskell , 108 106 94 byte

([0]#[2..]!!)
(a:b)#(p:q)=length b:([b#(a+d:div p d:q)|d<-[2..p-1],mod p d<1]++[(p:a:b)#q])!!0

Hãy thử trực tuyến! Ví dụ sử dụng: ([0]#[2..]!!) 10sản lượng 6(0 chỉ mục).

Hàm #hoạt động trên hai danh sách, mặt trước đảo ngược của mảng [p-1, p-2, ..., 1]và phần còn lại vô hạn của mảng [p, p+1, p+2, ...]. Nó xây dựng một danh sách vô hạn các vị trí, từ đó nvị trí thứ được trả về cho một đầu vào n.

Mẫu ((a:b)#(p:q))liên kết pvới giá trị của vị trí hiện tại của con kiến ​​và avới giá trị vị trí trước đó. blà tiền tố của mảng từ vị trí 1 đến p-2qphần còn lại vô hạn bắt đầu từ vị trí p+1.

Chúng tôi xây dựng một danh sách các cuộc gọi đệ quy theo cách sau: Chúng tôi xem xét từng ước dcủa p(lớn hơn một và nhỏ hơn p) theo thứ tự tăng dần và thêm b#(a+d:div p d:q)cho mỗi trong số chúng, đó là giá trị hiện tại pđược chia cho dvà kiến ​​di chuyển một bước ở bên trái nơi dđược thêm vào a. Sau đó, chúng tôi nối (p:a:b)#qvào cuối danh sách này, cho biết con kiến ​​di chuyển một bước sang phải.

Sau đó, chúng tôi nhận cuộc gọi đệ quy đầu tiên từ danh sách và đặt trước vị trí hiện tại trùng với độ dài của danh sách tiền tố b. Bởi vì các ước số theo thứ tự tăng dần, chọn đầu tiên từ danh sách các cuộc gọi đệ quy đảm bảo chúng tôi sử dụng cuộc gọi nhỏ nhất. Ngoài ra, vì (p:a:b)#qđược thêm vào cuối danh sách, nó chỉ được chọn nếu không có ước số và pdo đó là số nguyên tố.

Chỉnh sửa:
-2 byte bằng cách chuyển danh sách các hàm từ thứ tự giảm dần sang tăng dần.
-12 byte nhờ vào ý tưởng của Zgarb để lập chỉ mục vào một danh sách vô hạn thay vì xử lý bộ đếm và bằng cách chuyển sang lập chỉ mục 0.


2
96 byte bằng cách xây dựng một danh sách vô hạn và lập chỉ mục, thay vì mang theo xung quanh quầy.
Zgarb

1
@Zgarb Cảm ơn rất nhiều! Nó thậm chí chỉ 94 byte khi chuyển sang lập chỉ mục 0.
Laikoni

5

TI-BASIC, 108 103 102 98 byte

Đầu vào và đầu ra được lưu trữ trong Ans. Đầu ra là 1 chỉ mục.

Ans→N
seq(X,X,2,9³→A
1→P
For(I,1,N
1→X:∟A(P→V
For(F,2,√(V
If X and not(fPart(V/F:Then
DelVar XV/F→∟A(P
P-1→P
F+∟A(P→∟A(P
End
End
P+X→P
End

Bạn có thể mất một byte fPart(∟A(P)/F:với fPart(F¹∟A(P:. Điều tương tự trong dòng tiếp theo.
Scott Milner

@ScottMilner Điều đó không phải lúc nào cũng hoạt động. not(fPart(7⁻¹7là 0 nhưng not(fPart(7/7là 1.
kamoroso94

5

MATL , 41 byte

:Q1y"XHyw)Zp?5MQ}1MtYf1)/H(8MyfHq=*+9M]]&

Đầu ra là 1 dựa trên. Chương trình hết thời gian cho trường hợp thử nghiệm cuối cùng trong trình thông dịch trực tuyến.

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

Giải trình

Chương trình áp dụng các thủ tục như được mô tả trong thử thách. Để làm như vậy, nó sử dụng rất nhiều các bảng kẹp thủ công và tự động của MATL.

Số chia nhỏ nhất thu được là mục đầu tiên trong phân tách thừa số nguyên tố.

Các "chia" cập nhật được thực hiện bằng cách ghi đè các mục tương ứng của mảng A . Các "add" cập nhật được thực hiện bằng yếu tố khôn ngoan thêm vào A một mảng có chứa số không trừ vào vị trí mong muốn.

:Q        % Implicitly input n. Push array [2 3 ... n+1]. This is the initial array A. 
          % It contains all required positions. Some values will be overwritten
1         % Push 1. This is the initial value for p
y         % Duplicate from below
"         % For each loop. This executes the following n times.
          %   STACK (contents whosn bottom to top): A, p
  XH      %   Copy p into clipboard H
  y       %   Duplicate from below. STACK: A, p, A
  w       %   Swap. STACK: A, A, p
  )       %   Reference indexing. STACK: A, A[p]
  Zp      %   Isprime. STACK: A, false/true
  ?       %   If true (that is, if A[p] is prime)
    5M    %     Push p from automatic clipboard. STACK: A, p
    Q     %     Add 1. STACK: A, p+1
  }       %   Else (that is, if A[p] is not prime)
    1M    %     Push A[p] from automatic clipboard. STACK: A, A[p]
    t     %     Duplicate. STACK: A, A[p], A[p]
    Yf    %     Prime factors, with repetitions. STACK: A, A[p], prime factors of A[p]
    1)    %     Get first element, d. STACK: A, A[p], d
    /     %     Divide. STACK: A, A[p]/d
    H     %     Push p from clipboard H. STACK: A, A[p]/d, p
    (     %     Assignment indexing: write value. STACK: A with A[p] updated
    8M    %     Push d from automatic clipboard.
    y     %     Duplicate from below. STACK: A with A[p] updated, d, A with A[p] updated
    f     %     Find: push indices of nonzero entries.
          %     STACK: A with A[p] updated, d, [1 2 ... n]
    Hq    %     Push p from clipboard H, subtract 1.
          %     STACK: A with A[p] updated, d, [1 2 ... n], p-1
    =     %     Test for equality, element-wise.
          %     STACK: A with A[p] updated, d, [0 ... 0 1 0 ... 0]
    *     %     Multiply, element-wise. STACK: A with A[p] updated, [0 ... 0 d 0 ... 0]
    +     %     Add, element-wise. STACK: A with A[p-1] and A[p] updated
    9M    %     Push p-1 from automatic clipboard.
          %     STACK: A with A[p-1] and A[p] updated, p-1
  ]       %   End if. The stack contains the updated array and index
]         % End for each. Process the next iteration
&         % Specify that the following implicit display function should display only
          % the top of the stack. Implicitly display


3

PARI / GP, 87 byte

f(n)=A=[2..9^5];p=1;for(i=1,n,q=factor(A[p])[1,1];if(A[p]-q,A[p]/=q;p--;A[p]+=q,p++));p

Khá tự giải thích (không phải là golf-ish). Nếu bạn không tính f(n)=phần đó, thì đó là 82 byte. Bạn cũng có thể bắt đầu bằng n->(85 byte).

Nó là một ngôn ngữ 1 chỉ mục.


Chỉnh sửa: Bản sửa đổi illustrate(n,m)=A=[2..m+1];p=1;for(i=1,n,for(j=1,m,printf("%5s",if(j==p,Str(">",A[j],"<"),Str(A[j]," "))));print();q=factor(A[p])[1,1];if(A[p]!=q,A[p]/=q;p--;A[p]+=q,p++))sẽ in hình minh họa về lối đi của kiến ​​(được cung cấp một thiết bị đầu cuối đủ rộng). Ví dụ: illustrate(150,25)sẽ đưa ra 150 bước đầu tiên trên 25 cột, như sau:

  > 2 <3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2> 3 <4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 3> 4 <5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2> 5 <2 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5> 2 <5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 2> 5 <6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 2 5> 6 <7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 2> 7 <3 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 2 7> 3 <7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 2 7 3> 7 <8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 2 7 3 7> 8 <9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 2 7 3> 9 <4 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 2 7> 6 <3 4 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 2> 9 <3 3 4 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5> 5 <3 3 3 4 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5> 3 <3 3 4 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3> 3 <3 4 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3> 3 <4 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 3> 4 <9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3> 5 <2 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5> 2 <9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 2> 9 <10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5> 5 <3 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 5> 3 <10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 5 3> 10 <11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 5> 5 <5 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 5 5> 5 <11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 5 5 5> 11 <12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 5 5 5 11> 12 <13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 5 5 5> 13 <6 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 5 5 5 13> 6 <13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 5 5 5> 15 <3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 5 5> 8 <5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 5> 7 <4 5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 5 7> 4 <5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5 5> 9 <2 5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 5> 8 <3 2 5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3> 7 <4 3 2 5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3 7> 4 <3 2 5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3 3> 9 <2 3 2 5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 3> 6 <3 2 3 2 5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5> 5 <3 3 2 3 2 5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5> 3 <3 2 3 2 5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3> 3 <2 3 2 5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3> 2 <3 2 5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2> 3 <2 5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3> 2 <5 3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2> 5 <3 13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 5> 3 <13 14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 5 3> 13 <14 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 5 3 13> 14 <15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 5 3> 15 <7 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 5> 6 <5 7 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2> 7 <3 5 7 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7> 3 <5 7 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7 3> 5 <7 15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7 3 5> 7 <15 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7 3 5 7> 15 <16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7 3 5> 10 <5 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7 3> 7 <5 5 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7 3 7> 5 <5 16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7 3 7 5> 5 <16 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7 3 7 5 5> 16 <17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7 3 7 5> 7 <8 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7 3 7 5 7> 8 <17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7 3 7 5> 9 <4 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7 3 7> 8 <3 4 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7 3> 9 <4 3 4 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2 7> 6 <3 4 3 4 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 2> 9 <3 3 4 3 4 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3> 5 <3 3 3 4 3 4 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5> 3 <3 3 4 3 4 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3> 3 <3 4 3 4 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3> 3 <4 3 4 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 3> 4 <3 4 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3> 5 <2 3 4 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5> 2 <3 4 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2> 3 <4 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 3> 4 <17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2> 5 <2 17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 5> 2 <17 18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 5 2> 17 <18 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 5 2 17> 18 <19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 5 2> 19 <9 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 5 2 19> 9 <19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 5 2> 22 <3 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 5> 4 <11 3 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2> 7 <2 11 3 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7> 2 <11 3 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 2> 11 <3 19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 2 11> 3 <19 20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 2 11 3> 19 <20 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 2 11 3 19> 20 <21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 2 11 3> 21 <10 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 2 11> 6 <7 10 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 2> 13 <3 7 10 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 2 13> 3 <7 10 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 2 13 3> 7 <10 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 2 13 3 7> 10 <21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 2 13 3> 9 <5 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 2 13> 6 <3 5 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 2> 15 <3 3 5 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7> 5 <5 3 3 5 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5> 5 <3 3 5 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5> 3 <3 5 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3> 3 <5 21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 3> 5 <21 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 3 5> 21 <22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 3> 8 <7 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3> 5 <4 7 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 5> 4 <7 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3> 7 <2 7 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7> 2 <7 22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 2> 7 <22 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 2 7> 22 <23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 2> 9 <11 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7> 5 <3 11 23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 5> 3 <11 ​​23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 5 3> 11 <23 24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 5 3 11> 23 <24 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 5 3 11 23> 24 <25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 5 3 11> 25 <12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 5 3> 16 <5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 5> 5 <8 5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 5 5> 8 <5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 5> 7 <4 5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 5 7> 4 <5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7 5> 9 <2 5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3 7> 8 <3 2 5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5 3> 9 <4 3 2 5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 5> 6 <3 4 3 2 5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5> 7 <3 3 4 3 2 5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7> 3 <3 4 3 2 5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3> 3 <4 3 2 5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 3> 4 <3 2 5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3> 5 <2 3 2 5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5> 2 <3 2 5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5 2> 3 <2 5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5 2 3> 2 <5 12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5 2 3 2> 5 <12 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5 2 3 2 5> 12 <25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5 2 3 2> 7 <6 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5 2 3 2 7> 6 <25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5 2 3 2> 9 <3 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5 2 3> 5 <3 3 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5 2 3 5> 3 <3 25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5 2 3 5 3> 3 <25 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5 2 3 5 3 3> 25 <26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5 2 3 5 3> 8 <5 26
   2 5 5 5 3 3 2 3 5 3 3 5 2 7 5 7 3 5 2 3 5> 5 <4 5 26
   

2

Python 2 , 142 127 byte

  • Đã lưu mười lăm byte nhờ Sherlock9 .
T=range(2,input()+2);p=0
for _ in T:
 m=T[p];d=min(k for k in range(2,m+1)if m%k<1);p+=1
 if d<m:T[p-1]/=d;p-=2;T[p]+=d
print p

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




@FelipeNardiBatista Thật không may, đề xuất của bạn dường như không hoạt động đối với các trường hợp thử nghiệmn<=4
Sherlock9

2

Toán học, 118 103 byte

(s=Range[2,5^6];t=1;Do[If[PrimeQ@s[[t]],t++,s[[t]]/=(k=#2&@@ Divisors@s[[t]]);s[[t-1]]+=k;t--],#];t-1)&


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

Martin Ender đã lưu 15 byte


Bạn đã có một không gian đi lạc phía trước Divisors, bạn có thể sử dụng ký hiệu infix cho Dovà bạn chỉ có thể quay lại tthay vì t-1(kết quả dựa trên 1).
Martin Ender

2

Python 3 , 158 149 133 byte

Đây là một triển khai thủ tục đơn giản với một hoặc hai quirks để đảm bảo mã hoạt động cho tất cả các trường hợp thử nghiệm. Tôi sử dụng [*range(2,n+9)]để đảm bảo rằng A đủ lớn (ngoại trừ n<3, n+9là quá đủ). Các elsekhoản phân chia cũ A[p]bằng d, suất này p, và sau đó thêm dvào mới A[p], mà chắc chắn là thực hành mã hóa xấu. Nếu không, khá đơn giản. Gợi ý chơi golf chào mừng!

Chỉnh sửa: -9 byte mà không cần sympynhờ Halvard Hummel. -14 byte từ Felipe Nardi Batista, -6 byte từ một số tín hiệu từ câu trả lời Python 2 của Jonathan Frech

p,_,*A=range(int(input())+2)
for _ in A:
 m=A[p];d=min(k for k in range(2,m+1)if m%k<1);p+=1
 if d<m:A[p-1]//=d;p-=2;A[p]+=d
print(p)

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



148 byte bằng cách biến nó thành một chương trình đầy đủ
Felipe Nardi Batista

if d-m:A[p]...else:p+=1để tiết kiệm một byte
Felipe Nardi Batista

143 byte bằng cách xóa elsecâu lệnh
Felipe Nardi Batista

sau khi xóa elsecâu lệnh, không có sự khác biệt về byte đối với phiên bản hàm
Felipe Nardi Batista

2

PHP, 102 + 1 byte

for($a=range(2,$argn);$argn--;$d<$a[+$p]?$a[$p--]/=$d+!$a[$p]+=$d:$p++)for($d=1;$a[+$p]%++$d;);echo$p;

Chạy như ống với -Rhoặc thử trực tuyến .

Đầu ra trống cho đầu vào 0; chèn +sau echocho một nghĩa đen0

hoặc sử dụng phiên bản 1 chỉ mục này (103 + 1 byte):

for($a=range($p=1,$argn);$argn--;$d<$a[$p]?$a[$p--]/=$d+!$a[$p]+=$d:$p++)for($d=1;$a[$p]%++$d;);echo$p;

2

R , 123 byte

Một thực hiện đơn giản. Nó được cung cấp như một hàm, lấy số lần di chuyển làm đầu vào và trả về vị trí p.

Nó vòng qua chuỗi và di chuyển con trỏ ra sau theo quy tắc. Đầu ra dựa trên 0.

Một lưu ý: để tìm hệ số nguyên tố nhỏ nhất của một số x, nó tính mô đun của x so với tất cả các số nguyên từ 0 đến x. Sau đó, nó trích xuất các số có mô đun bằng 0, luôn luôn là [0,1, ..., x]. Nếu số thứ ba như vậy không phải là x, thì đó là hệ số nguyên tố nhỏ nhất của x.

p=function(l){w=0:l;v=w+1;j=1;for(i in w){y=v[j];x=w[!y%%w][3]
if(x%in%c(NA,y))j=j+1
else{v[j]=y/x;j=j-1;v[j]=v[j]+x}}
j-2}

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


2

C (gcc), 152 148 byte

Giảm thiểu

int f(int n){int*A=malloc(++n*4),p=0,i,q;for(i=0;i<n;i++)A[i]=i+2;for(i=1;i<n;i++){for(q=2;A[p]%q;q++);if(A[p++]>q){A[--p]/=q;A[--p]+=q;}}return p;}

Hình thành với một số ý kiến

int f(int n) {
  int *A = malloc(++n * 4), p = 0, i, q;
  // Initialize array A
  for (i = 0; i < n; i++)
    A[i] = i + 2;
  // Do n step (remember n was incremented)
  for (i = 1; i < n; i++) {
    // Find smallest divisor
    for (q = 2; A[p] % q; q++)
      ;
    if (A[p++] > q) {
      A[--p] /= q;
      A[--p] += q;
    }
  }
  return p;
}

Chức năng chính để thử nghiệm

#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv) {
  if (argc != 2)
    return 2;
  int n = atoi(argv[1]);
  int p = f(n);
  printf("%d => %d\n", n, p);
  return 0;
}

Để hiển thị từng bước

  1. Khai báo hiển thị () bên trong f ()

    int f(int n) {
      int *A = malloc(++n * 4), p = 0, i, q;
      void display(void) {
        for (int i=0; i < p; i++) {
          printf(" %d", A[i]);
        }
        printf(" \033[1;31m%d\033[m", A[p]);
        if (p+1 < n)
          printf(" %d", A[p+1]);
        printf("\n");
      }
      ...
  2. Hiển thị cuộc gọi ()

      A[i] = i + 2;
    display();
  3. Hiển thị cuộc gọi ()

      }
      display();
    }

Bạn có thể tắt một số byte bằng cách khai báo A là một mảng và khởi tạo các điều khiển vòng lặp của bạn trước các vòng lặp nếu có thể, phải không?
Phục hồi

1

Clojure, 185 byte

#(loop[[n p][(vec(range 2 1e3))0]i %](if(= i 0)p(recur(if-let[q(first(for[i(range 2(n p)):when(=(mod(n p)i)0)]i))][(assoc n p(/(n p)q)(dec p)(+(n(dec p))q))(dec p)][n(inc p)])(dec i))))

Ouch, chỉnh sửa một "trạng thái" không lý tưởng trong Clojure. Bạn sẽ cần tăng số mũ cho đầu vào lớn hơn.


Tại sao bạn sử dụng khớp mẫu trong loop? Bạn sẽ có thể mất một vài byte mà không cần điều đó.
clismique

Ngoài ra, bạn có thể thay đổi firstđiều này thành một sometuyên bố.
clismique

Không khớp mẫu, tôi phải lặp lại recurhai lần, mỗi lần cho mỗi if-letnhánh. Cũng (dec i)sẽ được nhân đôi. somecần một vị ngữ, tôi có thể sử dụng +khi chúng ta đang xử lý các con số nhưng đây là một ký tự dài hơn first. CMIIW
NikoNyrh

1

Java 8, 138 135 byte

n->{int a[]=new int[++n],s=0,p=0,j=0;for(;j<n;a[j++]=j+1);for(;++s<n;p++)for(j=1;++j<a[p];)if(a[p]%j<1){a[p--]/=j;a[p--]+=j;}return p;}

Giải trình:

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

n->{                     // Method with integer as both parameter and return-type
  int a[]=new int[++n],  //  Integer-array with a length of `n+1`
      s=0,               //  Steps-counter (starting at 0)
      p=0,               //  Current position (starting at 0)
      j=0;               //  Index integer (starting at 0)
  for(;j<n;              //  Loop (1) from 0 to the input (inclusive due to `++n` above)
    a[j++]=j+1           //   And fill the array with 2 through `n+2`
  );                     //  End of loop (1)
  for(;++s<n;            //  Loop (2) `n` amount of steps:
      p++)               //    And after every iteration: increase position `p` by 1
    for(j=1;             //   Reset `j` to 1
        ++j<a[p];)       //   Inner loop (3) from 2 to `a[p]` (the current item)
      if(a[p]%j<1){      //    If the current item is divisible by `j`:
        a[p--]/=j;       //     Divide the current item by `j`
        a[p--]+=j;}      //     And increase the previous item by `j`
                         //     And set position `p` two steps back (with both `p--`)
                         //   End of inner loop (3) (implicit / single-line body)
                         //  End of loop (2) (implicit / single-line body)
  return p;              //  Return the resulting position `p`
}                        // End of method

1

Clojure, 198 193 191 byte

Điều này cần phải được đánh golf nghiêm túc ...

#(loop[i(vec(range 2(+ % 9)))c 0 p 0](if(= % c)p(let[d(dec p)u(i p)f(some(fn[n](if(=(mod u n)0)n))(range 2(inc u)))e(= u f)](recur(if e i(assoc i d(+(i d)f)p(/ u f)))(inc c)(if e(inc p)d)))))

Golf 1 : Đã lưu 5 byte bằng cách thay đổi (first(filter ...))thành(some ...)

Golf 2 : Đã lưu 2 byte bằng cách thay đổi (zero? ...)thành(= ... 0)


Sử dụng:

(#(...) 10000) => 512

Mã bị đánh cắp:

(defn prime-ant [n]
  (loop [counter 0
         pos 0
         items (vec (range 2 (+ n 9)))]
    (if (= n counter) pos
      (let [cur-item (nth items pos)
            prime-factor
            (some #(if (zero? (mod cur-item %)) %)
              (range 2 (inc cur-item)))
            equals? (= cur-item prime-factor)]
        (recur
          (inc counter)
          (if equals? (inc pos) (dec pos))
          (if equals? items
            (assoc items
              (dec pos) (+ (items (dec pos)) prime-factor)
              pos (/ cur-item prime-factor))))))))
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.