Jump to content

Cornacchia's algorithm

From Wikipedia, the free encyclopedia
This is the current revision of this page, as edited by LucasBrown (talk | contribs) at 05:09, 6 February 2025 (Adding local short description: "Number-theoretic algorithm", overriding Wikidata description "described in 1908 by Giuseppe Cornacchia"). The present address (URL) is a permanent link to this version.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)

In computational number theory, Cornacchia's algorithm is an algorithm for solving the Diophantine equation , where and d and m are coprime. The algorithm was described in 1908 by Giuseppe Cornacchia.[1]

The algorithm

[edit]

First, find any solution to (perhaps by using an algorithm listed here); if no such exist, there can be no primitive solution to the original equation. Without loss of generality, we can assume that r0m/2 (if not, then replace r0 with m - r0, which will still be a root of -d). Then use the Euclidean algorithm to find , and so on; stop when . If is an integer, then the solution is ; otherwise try another root of -d until either a solution is found or all roots have been exhausted. In this case there is no primitive solution.

To find non-primitive solutions (x, y) where gcd(x, y) = g ≠ 1, note that the existence of such a solution implies that g2 divides m (and equivalently, that if m is square-free, then all solutions are primitive). Thus the above algorithm can be used to search for a primitive solution (u, v) to u2 + dv2 = m/g2. If such a solution is found, then (gu, gv) will be a solution to the original equation.

Example

[edit]

Solve the equation . A square root of −6 (mod 103) is 32, and 103 ≡ 7 (mod 32); since and , there is a solution x = 7, y = 3.

References

[edit]
  1. ^ Cornacchia, G. (1908). "Su di un metodo per la risoluzione in numeri interi dell' equazione ". Giornale di Matematiche di Battaglini. 46: 33–90.
[edit]