在 Mathematica 中求解二次同余方程

发布于 2024-12-11 04:30:16 字数 257 浏览 1 评论 0原文

为了在

   x^2 == 123456 mod 1299709 

Mathematica 中求解,我使用了:

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

这会产生正确的答案。

问题:Reduce 是解决二次同余方程的最佳方法(性能、优雅或其他)吗?

In order to solve

   x^2 == 123456 mod 1299709 

in Mathematica I have used:

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

which yields the correct answer.

Question: Is Reduce the best way ( performance, elegance or otherwise ) to solve quadratic congruence equations?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱格式化 2024-12-18 04:30:16

显然您正在寻找 Modulus 选项。

Reduce[x^2 == 123456, x, Modulus -> 1299709]
(*Out[]=  x == 427784 || x == 871925 *)

引用文档:

模数 -> n
是可以在某些代数函数中给出的选项,用于指定应以 n 为模处理整数.

  • 模数方程可以在 Solve 和相关函数中给出。

  • 模数作为 Factor、PolynomialGCD 和 PolynomialLCM 以及线性代数函数(例如 Inverse、
    LinearSolve 和 Det。

  • 算术通常是在整环 ℤ 整数上进行的;设置选项 Modulus 指定算术应该是
    在有限环 ℤn 中完成。

  • 设置 Modulus->0 指定整环 ℤ 整数。

  • 某些函数要求将模数设置为素数或素数的幂。当 n 为素数时,ℤn 是有限域。

Apparently you are seeking the Modulus option.

Reduce[x^2 == 123456, x, Modulus -> 1299709]
(*Out[]=  x == 427784 || x == 871925 *)

Quoting the documentation:

Modulus -> n
is an option that can be given in certain algebraic functions to specify that integers should be treated modulo n.

  • Equations for Modulus can be given in Solve and related functions.

  • Modulus appears as an option in Factor, PolynomialGCD and PolynomialLCM, as well as in linear algebra functions such as Inverse,
    LinearSolve and Det.

  • Arithmetic is usually done over the full ring ℤ of integers; setting the option Modulus specifies that arithmetic should instead be
    done in the finite ring ℤn.

  • The setting Modulus->0 specifies the full ring ℤ of integers.

  • Some functions require that Modulus be set to a prime, or a power of a prime. ℤn is a finite field when n is prime.

池木 2024-12-18 04:30:16
In[1]:= PowerModList[123456, 1/2, 1299709]
Out[1]= {427784, 871925}

丹尼尔·利希布劳

In[1]:= PowerModList[123456, 1/2, 1299709]
Out[1]= {427784, 871925}

Daniel Lichtblau

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文