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/mile k, miçinde [1 2 ...n]bir şekilde, nx nmatris. Satır numarayı ve sütun da paydayı gösterir. Aslında, matris girişi m/kyerine 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/4bu 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).
4Bir ö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