Need help filling in the body of the static method naturalNu

Need help filling in the body of the static method naturalNumberRoot so that it computes the root of a natural number

import components.naturalnumber.NaturalNumber;
import components.naturalnumber.NaturalNumber2;
import components.simplewriter.SimpleWriter;
import components.simplewriter.SimpleWriter1L;

/**
* Program with implementation of {@code NaturalNumber} secondary operation
* {@code root} implemented as static method.
*
* @author Put your name here
*
*/
public final class NaturalNumberRoot {

/**
* Private constructor so this utility class cannot be instantiated.
*/
private NaturalNumberRoot() {
}

/**

   * Updates {@code n} to the {@code r}-th root of its incoming value.

   *

   * @param n

   * the number whose root to compute

   * @param r

   * root

   * @updates n

   * @requires r >= 2

   * @ensures n ^ (r) <= #n < (n + 1) ^ (r)

   */

public static void root(NaturalNumber n, int r) {

assert n != null : \"Violation of: n is not null\";

assert r >= 2 : \"Violation of: r >= 2\";

  

  

}

/**

   * Main method.

   *

   * @param args

   * the command line arguments

   */

public static void main(String[] args) {

SimpleWriter out = new SimpleWriter1L();

final String[] numbers = { \"0\", \"1\", \"13\", \"1024\", \"189943527\", \"0\",

\"1\", \"13\", \"4096\", \"189943527\", \"0\", \"1\", \"13\", \"1024\",

\"189943527\", \"82\", \"82\", \"82\", \"82\", \"82\", \"9\", \"27\", \"81\",

\"243\", \"143489073\", \"2147483647\", \"2147483648\",

\"9223372036854775807\", \"9223372036854775808\",

\"618970019642690137449562111\",

\"162259276829213363391578010288127\",

\"170141183460469231731687303715884105727\" };

final int[] roots = { 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 15, 15, 15, 15, 15,

2, 3, 4, 5, 15, 2, 3, 4, 5, 15, 2, 2, 3, 3, 4, 5, 6 };

final String[] results = { \"0\", \"1\", \"3\", \"32\", \"13782\", \"0\", \"1\", \"2\",

\"16\", \"574\", \"0\", \"1\", \"1\", \"1\", \"3\", \"9\", \"4\", \"3\", \"2\", \"1\",

\"3\", \"3\", \"3\", \"3\", \"3\", \"46340\", \"46340\", \"2097151\", \"2097152\",

\"4987896\", \"2767208\", \"2353973\" };

for (int i = 0; i < numbers.length; i++) {

NaturalNumber n = new NaturalNumber2(numbers[i]);

NaturalNumber r = new NaturalNumber2(results[i]);

root(n, roots[i]);

if (n.equals(r)) {

out.println(\"Test \" + (i + 1) + \" passed: root(\" + numbers[i]

+ \", \" + roots[i] + \") = \" + results[i]);

} else {

out.println(\"*** Test \" + (i + 1) + \" failed: root(\"

+ numbers[i] + \", \" + roots[i] + \") expected <\"

+ results[i] + \"> but was <\" + n + \">\");

}

}

out.close();

}

}

Solution

import components.naturalnumber.NaturalNumber;
import components.naturalnumber.NaturalNumber2;
import components.simplewriter.SimpleWriter;
import components.simplewriter.SimpleWriter1L;

public final class NaturalNumberRoot {

    /**
     * Private constructor so this utility class cannot be instantiated.
     */
    private NaturalNumberRoot() {
    }

    private static NaturalNumber ONE = new NaturalNumber2(1);
    private static NaturalNumber TWO = new NaturalNumber2(2);

    /**
     * Updates {@code n} to the {@code r}-th root of its incoming value.
     *
     */
    public static void root(NaturalNumber n, int r) {
        assert n != null : \"Violation of: n is not null\";
        assert r >= 2 : \"Violation of: r >= 2\";

        NaturalNumber lowEnough = n.newInstance();

        NaturalNumber tooHigh = n.newInstance();
        tooHigh.copyFrom(n);
        tooHigh.increment();

        NaturalNumber guess = n.newInstance();
        guess.copyFrom(n);
        guess.divide(TWO);

        NaturalNumber diff = n.newInstance();
        diff.copyFrom(tooHigh);
        diff.subtract(lowEnough);

        while (diff.compareTo(ONE) > 0) {
            NaturalNumber guessPower = n.newInstance();
            guessPower.copyFrom(guess);
            guessPower.power(r);

            if (n.compareTo(guessPower) < 0) {
                tooHigh.transferFrom(guess);
            } else {
                lowEnough.transferFrom(guess);
            }
            //the next four lines diff is just acting as a temp variable
            diff.copyFrom(tooHigh);
            diff.subtract(lowEnough);
            diff.divide(TWO);
            diff.add(lowEnough);
            guess.transferFrom(diff);

            diff.copyFrom(tooHigh);
            diff.subtract(lowEnough);
        }

        n.transferFrom(lowEnough);
    }

    /**
     * Main method.
     */
    public static void main(String[] args) {
        SimpleWriter out = new SimpleWriter1L();

        final int[] numbers = { 0, 1, 13, 1024, 189943527, 0, 1, 13, 4096,
                189943527, 0, 1, 13, 1024, 189943527, 82, 82, 82, 82, 82, 9,
                27, 81, 243, 143489073 };
        final int[] roots = { 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 15, 15, 15, 15, 15,
                2, 3, 4, 5, 15, 2, 3, 4, 5, 15 };
        final int[] results = { 0, 1, 3, 32, 13782, 0, 1, 2, 16, 574, 0, 1, 1,
                1, 3, 9, 4, 3, 2, 1, 3, 3, 3, 3, 3 };

        for (int i = 0; i < numbers.length; i++) {
            NaturalNumber n = new NaturalNumber2(numbers[i]);
            NaturalNumber r = new NaturalNumber2(results[i]);
            root(n, roots[i]);
            if (n.equals(r)) {
                out.println(\"Test \" + (i + 1) + \" passed: root(\" + numbers[i]
                        + \", \" + roots[i] + \") = \" + results[i]);
            } else {
                out.println(\"*** Test \" + (i + 1) + \" failed: root(\"
                        + numbers[i] + \", \" + roots[i] + \") expected <\"
                        + results[i] + \"> but was <\" + n + \">\");
            }
        }

        out.close();
    }
}

Need help filling in the body of the static method naturalNumberRoot so that it computes the root of a natural number import components.naturalnumber.NaturalNum
Need help filling in the body of the static method naturalNumberRoot so that it computes the root of a natural number import components.naturalnumber.NaturalNum
Need help filling in the body of the static method naturalNumberRoot so that it computes the root of a natural number import components.naturalnumber.NaturalNum
Need help filling in the body of the static method naturalNumberRoot so that it computes the root of a natural number import components.naturalnumber.NaturalNum

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site