Surd.java
What is a surd? It is a real number of the form \(a + b\sqrt{n}\), where \(a\) and \(b\) are integers. The value \(n\) is called the surd value. This value must be a square-free number and we must have \(n > 2\). Surds with the same surd value are closed under multiplication and addition; to wit, the sum or product of two surds of wiht the same surd value is another surd with the same surd value. We show this for addition
$$a + b\sqrt{n} + c + d\sqrt{n} = (a + c) + (b + d)\sqrt{n}.$$and for multiplication
$$(a + b\sqrt{n})(c + d\sqrt{n}) = (ac + bdn) + (ad + bc)\sqrt{n}. $$If \(n\) is not square-free or if \(n < 2\), you will throw an
IllegalArgumentException.  If you attempt to add or multiply
surds with diffent surd values, throw an IllegalArgumentException.
If $\(a + b\sqrt{n}\)$ is a surd, we define its conjugate
to be $\(a - b\sqrt{n}\)$.  You will also create a negate()
method that computes the additive inverse of a surd.  
You will create standard equals and toString()
methods as well.
You will write a private static method to check to see if an integer \(n \ge 2\) is square-free.
A Spin in jshell
jshell> /open Surd.java
  
jshell> Surd s = new Surd(1,1, 2);
s ==> 1 + 1\sqrt{2}
jshell> Surd t = new Surd(2,3, 2);
t ==> 2 + 3\sqrt{2}
jshell> System.out.println(s.add(t));
3 + 4\sqrt{2}
jshell> System.out.println(s.subtract(t));
-1 - 2\sqrt{2}
jshell> System.out.println(s.multiply(t));
8 + 5\sqrt{2}
jshell> System.out.println(s.pow(10));
3363 + 2378\sqrt{2}
jshell> s.negate()
$8 ==> -1 - 1\sqrt{2}
jshell> s.conjugate()
$9 ==> 1 - 1\sqrt{2}
jshell> s.equals("Ham Sandwich")
$10 ==> false
jshell> Surd u = new Surd(2,3,2);
u ==> 2 + 3\sqrt{2}
jshell> t.equals(u)
$12 ==> true
jshell> s.equals(u)
$12 ==> false
API Specs The Javadoc for this class can be found here.
Amusing Question for the Adventurous For surds with surd value \(n = 2\), can you find a surd that is not equal to \(1 + 0\sqrt{2}\) that has a multiplicative inverse? Can you find an infinitude of these?