lambda n:[k/n for k in range(n*n)if k/n*k%n==1]
Спробуйте в Інтернеті!
Фон
Розглянемо кільце . Хоча це кільце зазвичай визначається за допомогою модулів n залишків класів , його також можна розглядати як набір Z n = { 0 , … , n - 1 } , де оператори додавання та множення визначаються а + n b = ( a + б )(Zn,+n,⋅n)nZn={0,…,n−1} і a ⋅ n b = a ⋅ ba+nb=(a+b)%n , де + ,a⋅nb=a⋅b%n позначають звичайні оператори додавання, множення та модуля для цілих чисел.+,⋅, and %
Два елементи і б з Z п називаються взаємні мультиплікативні інверсій по модулю п , якщо на ⋅ п Ь = 1abZnn . Зауважимо, що 1a⋅nb=1%n коли n > 1 .1%n=1n>1
Виправте і нехай a є копрієм n у Z n . Якщо на ⋅ п х = а ⋅ л у для двох елементів х і у з Z п , ми маємо , що ⋅ хn>1anZna⋅nx=a⋅nyxyZn . Звідси випливає, що a ⋅ ( x - y )a⋅x%n=a⋅y%n , і випливає, що n ∣ a ⋅ ( x - y ) , тобто n ділить a ⋅ ( x - y ) рівномірно. Оскільки n не ділиться з простими дільниками на a , це означає, що n ∣ x - y . Нарешті, оскільки - n < x - y < n , робимо висновок, що x = y . Це показує, що продукти a ⋅a ⋅ ( x - y)%n = a ⋅ x%n - a ⋅ y%n = 0n ∣ a ⋅ ( x - y)нa ⋅ ( x - y)наn ∣ x - y- п < х - у< nх = у - всі різні елементи Z n . Оскільки Z n має рівно n елементів, один (і саме один) цих виробів повинен бути рівний 1 , тобтов Z n єунікальне b таке, що a ⋅ n b = 1 .a⋅n0,…,a⋅n(n−1)ZnZnn1 bZna⋅nb=1
І навпаки, виправте і нехай a - елемент Z n, який не є coprime до n . У цьому випадку існує просте p таке, що p ∣ a і p ∣ n . Якщо визнав мультиплікативний зворотний по модулю п (назвемо його б ), ми б , що ⋅ п Ь = 1 , що означає , що ⋅ бn>1aZnnpp∣ap∣nanba⋅nb=1 і, отже, ( a ⋅ b - 1 )a⋅b%n=1 , тому n ∣ a ⋅ b - 1 . Оскільки p ∣ a , то випливає, що p ∣ a ⋅ b . З іншого боку, оскільки p ∣ n , ми також випливаємо, що p ∣ a ⋅ b - 1 . Таким чином, p ∣ ( a ⋅ b ) - ( a ⋅ b - 1 ) = 1(a⋅b−1)%n=a⋅b%n−1=0n∣a⋅b−1p∣ap∣a⋅bp∣np∣a⋅b−1p∣(a⋅b)−(a⋅b−1)=1, що суперечить припущенню, що - просте число.p
Це доводить, що наступні твердження еквівалентні, коли .n>1
і n - це спірне значення.an
допускає мультиплікативний зворотний модуль n .an
допускаєунікальниймультиплікативний зворотний модуль n .an
Як це працює
Для кожної пари цілих чисел і b в Z n ціле число k : = a ⋅ n + b є унікальним; насправді, a і b є коефіцієнтом, а решта k поділена на n , тобто, задавши k , ми можемо відновити a = k / n і b = kabZnk:=a⋅n+baбкнкa = k / n , де / позначаєціледілення. Нарешті, оскільки a ≤ n - 1 і b ≤ n - 1 , k - елемент Z n 2 ; насправді k ≤ ( n - 1 ) ⋅ n + ( n - 1 ) = n 2 - 1 .b = k%н/a ≤ n - 1b ≤ n - 1кZн2k ≤ ( n - 1 ) ⋅ n + ( n - 1 ) = n2- 1
Як зазначалося вище, якщо і n є спільними, буде унікальний b такий, що a ⋅ bанб , тобто буде унікальна k така, що k / n = a і k / n ⋅ ka ⋅ b%n = 1кk / n = a , такгенерується список буде міститирівно один раз.k / n ⋅ k%n = ( k / n ) ⋅ ( k%n )%n = 1а
І навпаки, якщо і n не є одночасними, умова k / n ⋅ kан буде помилковим для всіх значень k таким, що a = k / n , тому створений списокнебудемістити a .k / n ⋅ k%n = 1кa = k / nа
Це доводить, що список, який повертається лямбда, буде містити всі -ма копії в Z n рівно один раз.нZн
1\n3\n
) як дійсний вихід?