Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

Cornacchia's algorithm

From Wikipedia, the free encyclopedia

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, one finds any solution to ; if no such exist, there can be no primitive solution to the original equation. Without loss of generality, one can assume that r0m/2 (if not, then replace r0 with m - r0, which will still be a root of -d). Then the Euclidean algorithm can be employed to find , and so on; stopping 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.

This algorithm can also be used to find non-primitive solutions (x, y) where gcd(x, y) = g ≠ 1, because 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]