import java.rmi.*; import java.rmi.server.UnicastRemoteObject; import java.math.BigInteger; public class FibonacciImpl extends UnicastRemoteObject implements Fibonacci { public FibonacciImpl() throws RemoteException { super(); } public BigInteger getFibonacci(int n) throws RemoteException { return this.getFibonacci(new BigInteger(Long.toString(n))); } public BigInteger getFibonacci(BigInteger n) throws RemoteException { System.out.println("Calculating the " + n + "th Fibonacci number"); BigInteger zero = new BigInteger("0"); BigInteger one = new BigInteger("1"); if (n.equals(zero)) return one; if (n.equals(one)) return one; BigInteger i = one; BigInteger low = one; BigInteger high = one; while (i.compareTo(n) == -1) { BigInteger temp = high; high = high.add(low); low = temp; i = i.add(one); } return high; } }