lambda n:[k/n for k in range(n*n)if k/n*k%n==1]
Wypróbuj online!
tło
Rozważmy pierścień . Chociaż ten pierścień jest zwykle definiowany za pomocą klas reszt modulo , można go również traktować jako zbiór , gdzie operatory dodawania i mnożenia są zdefiniowane przez oraz , gdzie oznacza zwykły dodatek, mnożenie i operatory modulo nad liczbami całkowitymi.n Z n = { 0 , … , n - 1 } a + n b = ( a + b )( Zn, +n,⋅n)nZn={0,…,n−1}a ⋅ n b = a ⋅ ba+nb=(a+b)%n+ ,a ⋅nb = a ⋅ b%n+ ,⋅ i %
Dwa elementy i z nazywane są wzajemne multiplikatywne odwrotności modulo , jeśli . Zauważ, że za każdym razem, gdy .b Z n n a ⋅ n b = 1zabZnn1a ⋅nb = 1%nn > 11%n = 1n > 1
Ustalić i pozwolić być względnie pierwsze z w . Jeżeli dwa elementy i w mamy że . Oznacza to, że , a my podążamy za tym , tzn. dzieli równomiernie . Ponieważ nie dzieli pierwszych dzielników z , oznacza to, że . Wreszcie, ponieważa n Z n a ⋅ n x = a ⋅ n y x y Z n a ⋅ xn > 1zanZna ⋅nx = a ⋅nyxyZna ⋅ ( x - y )a ⋅ x%n = a ⋅ y%nn ∣ a ⋅ ( x - y ) n a ⋅ ( x - y ) n a n ∣ x - y - n < x - y < n x = y a ⋅ n 0 , … , a ⋅ n ( n - 1 ) Z n Z n n 1 b Za ⋅ ( x - y)%n = a ⋅ x%n - a ⋅ y%n = 0n ∣ a ⋅ ( x - y)na ⋅ ( x - y)nzan ∣ x - y−n<x−y<n , wnioskujemy, że . To pokazuje, że produkty są różnymi elementami . Od ma dokładnie elementów, jedną (i) dokładnie jeden z tych produktów może być równa , to znaczy, jest unikalny w taki sposób, że .x=ya⋅n0,…,a⋅n(n−1)ZnZnn1 b a ⋅ n b = 1Zna⋅nb=1
Z drugiej strony, ustalić i pozwolić być elementem , który nie względnie pierwsze do . W tym przypadku istnieje liczba pierwsza taka że a . Jeśli dopuszczone do Liczba odwrotna modulo (nazwijmy go ), musielibyśmy że , co oznacza, że , a więc , więc . Od podążamy za tyma Z n n p p ∣ a p ∣ n a n b a ⋅ n b = 1 a ⋅ bn>1aZnnpp∣ap∣nanba⋅nb=1( a ⋅ b - 1 )a⋅b%n=1n ∣ a ⋅ b - 1 p ∣ a p ∣ a ⋅ b p ∣ n p ∣ a ⋅ b - 1 p ∣ ( a ⋅ b ) - ( a ⋅ b - 1 ) = 1 p(a⋅b−1)%n=a⋅b%n−1=0n∣a⋅b−1p∣ap∣a⋅b . Z drugiej strony, ponieważ , podążamy również za tym . W ten sposób , co jest sprzeczne z założeniem, że jest liczbą pierwszą.p∣np∣a⋅b−1p∣(a⋅b)−(a⋅b−1)=1p
Dowodzi to, że następujące instrukcje są równoważne, gdy .n>1
na i są chronione prawem autorskim.n
naprzyznaje zwielokrotniony odwrotny modulo .n
naprzyznaje się wyjątkową Liczba odwrotna modulo .n
Jak to działa
Dla każdej pary liczb całkowitych i w , liczba całkowita jest unikalny; W rzeczywistości, i są iloraz i pozostałą podzielone przez , to znaczy podane , można odzyskać , a , gdzie oznacza całkowitą podział. Na koniec, ponieważ i , jest elementem ; w rzeczywistości .b Z n k : = a ⋅ n + b a b k n k a = k / n b = kabZnk:=a⋅n+babknka=k/n/ a ≤ n - 1 b ≤ n - 1 k Z n 2 k ≤ ( n - 1 ) ⋅ n + ( n - 1 ) = n 2 - 1b=k%n/a≤n−1b≤n−1kZn2k≤(n−1)⋅n+(n−1)=n2−1
Jak wspomniano powyżej, jeśli i są koprime, będzie unikalny taki że , tzn. Będzie unikalny taki, że i , tak więc generowany lista zawiera dokładnie raz.n b a ⋅ banbk k / n = a k / n ⋅ ka⋅b%n=1kk/n=aak/n⋅k%n=(k/n)⋅(k%n)%n=1a
I odwrotnie, jeśli i nie są kopiami zapasowymi, warunek będzie fałszem dla wszystkich wartości takich, że , więc wygenerowana lista nie będzie zawierać .n k / n ⋅ kank a = k / n ak/n⋅k%n=1ka=k/na
Dowodzi to, że lista się lambda powraca będzie zawierać wszystkie coprimes „s w dokładnie raz.Z nnZn
1\n3\n
) Liczą się jako prawidłowe dane wyjściowe?