MATL , 17 13 bayt
:tt!/XR6#uG))
Çevrimiçi deneyin! Veya tüm test durumlarını doğrulayın .
Giriş boyutu kayan nokta doğruluğu ile sınırlı olabilir. Tüm test durumları doğru sonucu verir.
açıklama
Bu, tüm fraksiyonlar oluşturur k/m
ile k
, m
içinde [1 2 ...n]
bir şekilde, n
x n
matris. Satır numarayı ve sütun da paydayı gösterir. Aslında, matris girişi m/k
yerine ters fraksiyonu içerir k/m
, ancak bu konu dışıdır ve açıklamanın geri kalanında göz ardı edilebilir.
Matris girişlerinin dolaylı olarak sütun ana düzenine göre sıralandığı kabul edilir. Bu durumda, bu istenen düzene karşılık gelir: payda, daha sonra pay.
Bu matristen üç tür girişin göz ardı edilmesi gerekir:
- Girişler
k/m
, k>m
(örneğin, daha önceki bir girdi olarak aynı değere sahip olduğu 2/4
bu aynı olduğu için dikkate alınmaz 1/2
)
- Girişler
k/k
, k>1
. Paydağı geçen bir pay sahibi olan girişler
- Girişler
k/m
, k<m
(bunlar sorunun bir parçası değildir).
Girişleri dikkate almamak unique
, yinelenen değerleri kararlı bir şekilde kaldıran ve kalan girişlerin endekslerini çıkaran bir işlevle yapılır . Bununla, yukarıdaki 1 tipi girişler otomatik olarak kaldırılır. Tip 2 ve 3 ile ilgilenmek için, köşegen ve altındaki matris girişleri olarak ayarlanır 0
. Bu şekilde, birincisi hariç tüm sıfır girişler kaldırılır (geçerli kesir karşılık gelir 1/1
).
4
Bir örnek olarak girişi düşünün .
: % Input n implicitly. Push range [1 2 ...n]
% STACK: [1 2 3 4]
t % Duplicate
% STACK: [1 2 3 4], [1 2 3 4]
t! % Duplicate and transpose
% STACK: [1 2 3 4], [1 2 3 4], [1; 2; 3; 4]
/ % Divide element-wise with broadcast: gives matrix with all pairs
% STACK: [1 2 3 4], [1 2 3 4;
0.5000 1 1.5000 2;
0.3333 0.6667 1 1.3333;
0.2500 0.5000 0.7500 1 ]
XR % Upper triangular part above the diagonal. This sets to 0 all entries
% corresponding to fractions that equal or exceed 1. (Since the matrix
% actually contains the inverse fractions, nonzero entries will contain
% values greater than 1)
% STACK: [1 2 3 4], [0 2 3 4;
0 0 1.5000 2;
0 0 0 1.3333;
0 0 0 0 ]
6#u % Indices of first appearance of unique elements
% STACK: [1 2 3 4], [1; 5; 9; 10; 13; 15]
G % Push input n again
% STACK: [1 2 3 4], [1; 5; 9; 10; 13; 15], 4
) % Index: get the n-th entry from the array of indices of unique elements
% STACK: [1 2 3 4], 10
) % Index (modular): get the corresponding real part. Display implicitly
% STACK: 2