GolfScript (23 karakter)
{:^((1${\.**2^?%}+*}:f;
Hasil sentinel untuk invers yang tidak ada adalah 0
.
Ini adalah aplikasi sederhana dari teorema Euler . , jadi x - 1 ≡ x 2 n - 1 - 1xφ(2n)≡1(mod2n)x−1≡x2n−1−1(mod2n)
Sayangnya itu eksponensial terlalu besar untuk dihitung secara langsung, jadi kita harus menggunakan loop dan melakukan reduksi modular di dalam loop. Langkah berulang adalah dan kami memiliki pilihan kasus dasar: baik denganx2k−1=(x2k−1−1)2×xk=1
{1\:^(@{\.**2^?%}+*}:f;
atau k=2
dengan
{:^((1${\.**2^?%}+*}:f;
Saya sedang mengerjakan pendekatan lain, tetapi penjaga itu lebih sulit.
Pengamatan kuncinya adalah kita dapat membangun invers up sedikit demi sedikit: jika xy≡1(mod2k−1)xy∈{1,1+2k−1}(mod2k)xx(y+xy−1)≡1(mod2k)y′=(x+1)y−1
0x≡1(mod20)
x(1−(x+1)nx)≡1(mod2n)
x+1 genap.
Itu memberi fungsi 19-char
{1$)1$?@/~)2@?%}:f;
xx&1
1
{1$.1&+1$?@/~)2@?%}:f;
02n - 1 , tapi saya belum membuktikannya.
01−(x+1)n1−1n
{1$.1&*)1$?@/~)2@?%}:f;
nn x f
{..1&*)2$?\/~)2@?%}:f;