有没有办法在 y = (k1 + k2 × x) mod (s) 中指定 X?
Is there a way to designate X in y = (k1 + k2 × x) mod (s)?
我正在用 c# 编写程序,它需要找到 X,其中 k2 和 s 的最大公约数为 1,x 小于 s 并且 k1、k2、y、s 是常量。现在,我正在通过测试 X 的每个值并检查它们是否正确来完成此操作,但是当我有 40000 多个值时,这是非常耗时的。或者,如果这对您来说更容易,您可以尝试从 y=x mod(s) 指定 X。
我现在正在使用代码来解决它:
if (GCD(k2, k) == 1)
{
for (int i = 0; i < k; i++)
{
n1 = 0;
n = 0;
while(n < 1)
{
if(i == (k1 + k2 * n1) % k){
s1[n1] = s[i];
n++;
}
n1++;
}
}
}
提前致谢。
P.S。如果有什么不清楚的地方,请告诉我,我很难解释这一切 :P
让我们来看一个示例问题:
Solve for X:
17395 = (100 + 43 * X ) % 633424
从消除加法开始:
17395 - 100 = (43 * X) % 633424
17294 = (43 * X) % 633424
现在,假设存在一个数 Y 使得
1 = ( Y * 43 ) % 633424
(旁白:我们怎么知道 Y 存在?它存在当且仅当 43 和 633424 是互质的,它们是互质的。这是 Bézout 恒等式的一个特例。)
Y 是 43 关于 633424 的 乘法逆元 。
这有什么帮助?我们可以将两边都乘以 17294:
17294 = ( Y * 43 * 17294 ) % 633424
现在我们可以读出我们的解决方案:X 是 Y * 17294
。
因此问题简化为计算乘法逆元。你能看出如何找到满足 1 = ( Y * 43 ) % 633424
的数字 Y 吗?如果你能找到那个数字,那么你就能找到 X。
您可以使用欧几里得算法快速找到乘法逆元。参见 https://en.wikipedia.org/wiki/Modular_multiplicative_inverse or my page on the subject https://ericlippert.com/2013/11/12/math-from-scratch-part-thirteen-multiplicative-inverses/
我正在用 c# 编写程序,它需要找到 X,其中 k2 和 s 的最大公约数为 1,x 小于 s 并且 k1、k2、y、s 是常量。现在,我正在通过测试 X 的每个值并检查它们是否正确来完成此操作,但是当我有 40000 多个值时,这是非常耗时的。或者,如果这对您来说更容易,您可以尝试从 y=x mod(s) 指定 X。
我现在正在使用代码来解决它:
if (GCD(k2, k) == 1)
{
for (int i = 0; i < k; i++)
{
n1 = 0;
n = 0;
while(n < 1)
{
if(i == (k1 + k2 * n1) % k){
s1[n1] = s[i];
n++;
}
n1++;
}
}
}
提前致谢。
P.S。如果有什么不清楚的地方,请告诉我,我很难解释这一切 :P
让我们来看一个示例问题:
Solve for X:
17395 = (100 + 43 * X ) % 633424
从消除加法开始:
17395 - 100 = (43 * X) % 633424
17294 = (43 * X) % 633424
现在,假设存在一个数 Y 使得
1 = ( Y * 43 ) % 633424
(旁白:我们怎么知道 Y 存在?它存在当且仅当 43 和 633424 是互质的,它们是互质的。这是 Bézout 恒等式的一个特例。)
Y 是 43 关于 633424 的 乘法逆元 。
这有什么帮助?我们可以将两边都乘以 17294:
17294 = ( Y * 43 * 17294 ) % 633424
现在我们可以读出我们的解决方案:X 是 Y * 17294
。
因此问题简化为计算乘法逆元。你能看出如何找到满足 1 = ( Y * 43 ) % 633424
的数字 Y 吗?如果你能找到那个数字,那么你就能找到 X。
您可以使用欧几里得算法快速找到乘法逆元。参见 https://en.wikipedia.org/wiki/Modular_multiplicative_inverse or my page on the subject https://ericlippert.com/2013/11/12/math-from-scratch-part-thirteen-multiplicative-inverses/