求解Mathematica中的二次同余方程

时间:2011-10-21 20:25:07

标签: wolfram-mathematica modulo

为了解决

   x^2 == 123456 mod 1299709 

在Mathematica我用过:

  Reduce[x^2 == 123456 + 1299709 k, {x, k}, Integers]

得出正确的答案。

问题:减少解决二次同余方程的最佳方法(性能,优雅或其他方式)?

2 个答案:

答案 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