### 7.1.23 Solving Diophantine equations

The isolve command attempts to solve the given equations over the integers. Note that it automatically solves for all of the indeterminates present in the equations.

- isolve takes one mandatory argument and two optional arguments:
  - eq, an equation or list of equations.
  - Optionally, symb, a (sequence or list of) symbol(s) which are used as the names for global variables present in the solution. These names default to _Z0,_Z1,… for general integers and to _N0,_N1,… for positive integers.
  - Optionally, seq=false, which makes isolve return only particular/fundamental solution(s) found by the solver. By default, seq=true, which makes isolve return sequences (classes) of solutions whenever possible.
- isolve can solve the following types of equations:
  - (systems of) linear equation(s).
  - general quadratic equations with two indeterminates.
  - equations of the type Q(x,y,z)=0, where Q is a ternary quadratic form.
  - equations of the type f(x)=g(y), where f,g∈ℤ[X] are monic polynomials with degrees m and n such that gcd(m,n)>1 and f(x)−g(y) is irreducible in ℚ[X,Y].

#### Examples

Linear equations and systems can be solved.

isolve(5 x+42 y+8=0)

| ⎡ ⎣ | x=−10+42_Z 0,y=1−5_Z 0 | ⎤ ⎦

isolve([x+y-z=4,x-2 y+3 z=3],m)

| ⎡ ⎣ | x=m,y=−4 m+15,z=−3 m+11 | ⎤ ⎦

To find the general solution to Pell-type equation x2−23y2=1:

sol:=isolve(x^2-23 y^2=1,n)

⎡
⎢
⎢
⎢
⎢
⎣

x=

⎛
⎜
⎝

24+5

√

23

⎞
⎟
⎠

n

+

⎛
⎜
⎝

24−5

√

23

⎞
⎟
⎠

n

2

,y=

⎛
⎜
⎝

24+5

√

23

⎞
⎟
⎠

n

−

⎛
⎜
⎝

24−5

√

23

⎞
⎟
⎠

n

2

√

23

⎤
⎥
⎥
⎥
⎥
⎦

To check that it is indeed the solution, enter:

simplify(subs(x^2-23 y^2-1,sol))

0 |  |  |  |  |  |  |  |  |  |

Now to obtain e.g. the first four solutions, enter:

simplify(apply(unapply(apply(rhs,sol),n),[1,2,3,4]))

| ⎡ ⎣ | [24,5],[1151,240],[55224,11515],[2649601,552480] | ⎤ ⎦

To obtain only the fundamental solution, enter:

isolve(x^2-23 y^2=1,seq=false)

[x=24,y=5] |  |  |  |  |  |  |  |  |  |

The following two examples demonstrate solving quadratic equations with two indeterminates.

isolve(x^2-5 x*y+4 y^2=16)

⎡
⎢
⎢
⎢
⎢
⎢
⎢
⎢
⎢
⎢
⎢
⎢
⎣

x=−4, | y=−5
x=0, | y=−2
x=4, | y=0
x=10, | y=2
x=21, | y=5
x=4, | y=5
x=0, | y=2
x=−4, | y=0
x=−10, | y=−2
x=−21, | y=−5

⎤
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎥
⎦

isolve(x^2-3 x*y+y^2-x=2,n)

[[x

=

⎛
⎜
⎜
⎝

√

5

−3

2

⎞
⎟
⎟
⎠

n

⎛
⎜
⎝

−15

√

5

−33

⎞
⎟
⎠

10

+

⎛
⎜
⎜
⎝

−

√

5

−3

2

⎞
⎟
⎟
⎠

n

⎛
⎜
⎝

15

√

5

−33

⎞
⎟
⎠

10

−

2
5

,

y

=

⎛
⎜
⎜
⎝

√

5

−3

2

⎞
⎟
⎟
⎠

n

⎛
⎜
⎝

−3

√

5

−6

⎞
⎟
⎠

5

+

⎛
⎜
⎜
⎝

−

√

5

−3

2

⎞
⎟
⎟
⎠

n

⎛
⎜
⎝

3

√

5

−6

⎞
⎟
⎠

5

−

3
5

]]

isolve(8 x^2-24 x*y+18 y^2+5 x+7 y+16=0)

⎡
⎢
⎣

x=−174_Z 12+17_Z 1−2, | y=−116_Z 12+21_Z 1−2
x=−174_Z 12+41_Z 1−4, | y=−116_Z 12+37_Z 1−4

⎤
⎥
⎦

Integral zeros of ternary quadratic forms can be found.

isolve(x^2+11 y^2+6 x*y-3 z^2=0,a,b,c)

| ⎡ ⎣ | x=c | ⎛ ⎝ | −44 a2+12 b2 | ⎞ ⎠ | ,y=c | ⎛ ⎝ | 13 a2−3 b2−6 a b | ⎞ ⎠ | ,z=c | ⎛ ⎝ | −11 a2−3 b2+2 a b | ⎞ ⎠ | ⎤ ⎦

The components of the above solution can be divided by the GCD of −44 a2+12 b2, 13 a2−3 b2−6 a b, and −11 a2−3 b2+2 a b, thus producing a parametrization for the pairwise-coprime solutions given c=1.

Certain polynomial equations of the type f(x)=g(y) can be fully solved, as in the following example.

isolve(x^2-3 x+5=y^8-y^7+9 y^6-7 y^5+4 y^4-y^3)

⎡
⎢
⎢
⎢
⎢
⎢
⎢
⎣

x=−3, | y=−1
x=6, | y=−1
x=0, | y=1
x=3, | y=1
x=660, | y=5
x=−657, | y=5

⎤
⎥
⎥
⎥
⎥
⎥
⎥
⎦

The above list contains all integer solutions to the given equation.