为了解决
x^2 == 123456 mod 1299709
在Mathematica我用过:
Reduce[x^2 == 123456 + 1299709 k, {x, k}, Integers]
得出正确的答案。
问题:减少解决二次同余方程的最佳方法(性能,优雅或其他方式)?
答案 0 :(得分:8)
显然,您正在寻找Modulus
选项。
Reduce[x^2 == 123456, x, Modulus -> 1299709]
(*Out[]= x == 427784 || x == 871925 *)
引用文档:
模数 - > Ñ强>
是一个可以在某些代数函数中给出的选项,用于指定整数应该以模n处理。
模数的方程可以在求解和相关函数中给出。
模数在Factor,PolynomialGCD和PolynomialLCM以及线性代数函数(如Inverse)中作为选项出现。 LinearSolve和Det。
算术通常在整数的整数环上完成;设置选项Modulus指定算术应该是 在有限环ℤ n 中完成。
设置Modulus-> 0指定整数的完整环ℤ。
某些函数要求将模数设置为素数或素数的幂。当n为素数时,ℤ n 是一个有限域。
答案 1 :(得分:2)
In[1]:= PowerModList[123456, 1/2, 1299709]
Out[1]= {427784, 871925}
Daniel Lichtblau