GolfScript (23 ký tự)
{:^((1${\.**2^?%}+*}:f;
Kết quả sentinel cho một nghịch đảo không tồn tại là 0
.
Đây là một ứng dụng đơn giản của định lý Euler . , do đó x - 1 ≡ x 2 n - 1 - 1xφ ( 2n)≡ 1( mod2n)x- 1≡ x2n - 1- 1( mod2n)
Thật không may, đó là một số mũ quá lớn để tính toán trực tiếp, vì vậy chúng ta phải sử dụng một vòng lặp và thực hiện giảm mô-đun bên trong vòng lặp. Bước lặp là và chúng ta có một sự lựa chọn về trường hợp cơ sở: hoặc vớix2k- 1= ( X2k - 1- 1)2× xk=1
{1\:^(@{\.**2^?%}+*}:f;
hoặc k=2
với
{:^((1${\.**2^?%}+*}:f;
Tôi đang làm việc theo một cách tiếp cận khác, nhưng việc canh gác khó khăn hơn.
Các quan sát quan trọng là chúng ta có thể xây dựng các nghịch đảo lên từng chút một: nếu thì x y ∈ { 1 , 1 + 2 k - 1 }x y≡ 1( mod2k -1) , và nếu x là số lẻ chúng ta có x ( y + x y - 1 ) ≡ 1x y∈ { 1 , 1 + 2k - 1}( mod2k)x . (Nếu bạn không bị thuyết phục, hãy kiểm tra hai trường hợp riêng biệt). Vì vậy, chúng ta có thể bắt đầu tại bất kỳ trường hợp cơ sở phù hợp nào và áp dụng phép biến đổi y ′ = ( x + 1 ) y - 1 một số lần thích hợp.x ( y+ x y- 1 ) ≡ 1( mod2k)y'= ( x + 1 ) y- 1
Kể từ chúng tôi nhận được, bằng cảm ứng0 x ≡ 1( mod20)
x ( 1 - ( x + 1 )nx) ≡1( mod2n)
x + 1 là chẵn.
Điều đó mang lại cho chức năng 19 char
{1$)1$?@/~)2@?%}:f;
xx&1
1
{1$.1&+1$?@/~)2@?%}:f;
02n - 1 , nhưng tôi chưa chứng minh điều đó.
01 - ( x + 1 )n1 - 1n
{1$.1&*)1$?@/~)2@?%}:f;
nn x f
{..1&*)2$?\/~)2@?%}:f;