История изменений
Исправление quasimoto, (текущая версия) :
Короче, вопрос терминологии. Ты считаешь, что (арифметическая, надеюсь) функция «однозначно определена» только когда это функция-биекция. Для меня определённость это «просто последовательность действий, которая даёт результат», то есть функция. Или надо явно говорить «не определена обратная», «не биекция».
В случае вычетов, как минимум:
1. Любая f : ℤ × ℤ → ℤ со свойством ∃ n f₁ f₂. ∀ a b k l. f(a + k * n, b + l * n) = f₁(a, b, n) + f₂(a, b, k, l, n) * n обобщается с ℤ на ℤ/nℤ как f′ : ℤ/nℤ × ℤ/nℤ → ℤ/nℤ; f′([a], [b]) = [f₁(a, b, n) % n].
2. ⟨ℤ/nℤ, f′⟩ ≊ ⟨n ? [0, n) : ℤ, λ a b → f₁(a, b, n) % n⟩.
3. «Обобщается», так как при n = 0 получаем ℤ/0ℤ ≊ ℤ, f = f₁, f′([a], [b]) = [f(a, b)], ⟨ℤ/0ℤ, f′⟩ ≊ ⟨ℤ, f⟩.
4. +, ─ и * обладают свойством (1), так что ⟨ℤ/nℤ, +′, ─′, *′⟩ ≊ ⟨n ? [0, n) : ℤ, λ a b → (a + b) % n, λ a b → (a ─ b) % n, λ a b → (a * b) % n⟩.
2^n * 2^n == 2^(2*n).
Так мы в вычетах умножаем или где? «< 2 ^ n», ну и % (2 ^ n) на результате делать нужно, либо сдвигать на n.
В сишечке они просто выкидываются.
Что эквивалентно сдвигу, что эквивалентно взятию остатка по модулю от результата, то есть относительно {8, 16, 32, 64}-битных регистров мы получаем в точности умножение ℤ/(2^{8, 16, 32, 64})ℤ. А то речь шла про «это не вычеты» и «в вычетах нет умножения».
К чему это ты?
Опечатка у тебя там была.
Исходная версия quasimoto, :
Короче, вопрос терминологии. Ты считаешь, что (арифметическая, надеюсь) функция «однозначно определена» только когда это функция-биекция. Для меня определённость это «просто последовательность действий, которая даёт результат», то есть функция. Или надо явно говорить «не определена обратная», «не биекция».
В случае вычетов, как минимум:
1. Любая f : ℤ × ℤ → ℤ со свойством ∃ n f₁ f₂. ∀ a b k l. f(a + k * n, b + l * n) = f₁(a, b, n) + f₂(a, b, k, l, n) * n обобщается с ℤ на ℤ/nℤ как f′ : ℤ/nℤ × ℤ/nℤ → ℤ/nℤ; f′([a], ) = [f₁(a, b, n) % n].
2. ⟨ℤ/nℤ, f′⟩ ≊ ⟨n ? [0, n) : ℤ, λ a b → f₁(a, b, n) % n⟩.
3. «Обобщается», так как при n = 0 получаем ℤ/0ℤ ≊ ℤ, f = f₁, f′([a], ) = [f(a, b)], ⟨ℤ/0ℤ, f′⟩ ≊ ⟨ℤ, f⟩.
4. +, ─ и * обладают свойством (1), так что ⟨ℤ/nℤ, +′, ─′, *′⟩ ≊ ⟨n ? [0, n) : ℤ, λ a b → (a + b) % n, λ a b → (a ─ b) % n, λ a b → (a * b) % n⟩.
2^n * 2^n == 2^(2*n).
Так мы в вычетах умножаем или где? «< 2 ^ n», ну и % (2 ^ n) на результате делать нужно, либо сдвигать на n.
В сишечке они просто выкидываются.
Что эквивалентно сдвигу, что эквивалентно взятию остатка по модулю от результата, то есть относительно {8, 16, 32, 64}-битных регистров мы получаем в точности умножение ℤ/(2^{8, 16, 32, 64})ℤ. А то речь шла про «это не вычеты» и «в вычетах нет умножения».
К чему это ты?
Опечатка у тебя там была.