我有一个功能
y = ((N * x) / (M * N)) + ((N * x) % (M * N))
其中M和N是常数(用于矩阵转置)。但是,我需要为x解决它。我已经阅读了关于扩展欧几里德算法的多个主题或反模数的欧拉定理,但即使我终于找到了实现它的方法,一切都表明复杂性将远高于此。有什么建议吗?
答案 0 :(得分:4)
该功能简化为
y = (x / M) + N * (x % M).
对于y
0 ≤ y < M * N
来说,有一个独特的解决方案
x = (y / N) + M * (y % N),
因为这毕竟是转置。证据是通过计算。
((x / M) + N * (x % M)) / N + M * (((x / M) + N * (x % M)) % N)
= ((x / M) + N * (x % M)) / N + M * ((((x / M) % N + (N * (x % M)) % N) % N)
= ((x / M) + N * (x % M)) / N + M * (((x / M) % N) % N)
since (N * ...) % N = 0
= ((x / M) + N * (x % M)) / N + M * (x / M)
since 0 ≤ x / M < N
= x % M + M * (x / M)
since 0 ≤ x / M < N and N divides N * (x % M)
= x
by the Euclidean property of / and %.