public class Poly
{
private String variableName;
private long [] coeffs;
private long denominator;
// Constructors
public Poly ( String polyVariableName, long [] polyCoeffs, long polyDenominator )
{
variableName = polyVariableName;
coeffs = polyCoeffs;
denominator = polyDenominator;
}
// Debug quality printing. Takes a polynomial and displays its coefficents.
public String debugPrint ()
{
String returnValue = "(";
returnValue = returnValue + coeffs [0] + "*" + variableName + "^0";
for (int i = 1; i < coeffs.length; i++)
{ returnValue = returnValue + " + " + coeffs [i] + "*" + variableName + "^" + i; };
returnValue = returnValue + ")/";
returnValue = returnValue + denominator;
return returnValue;
}
// Special-case multiplication. Multiplication by a coefficient.
public static Poly mulByCoeff(Poly in, long mulBy)
{
Poly returnValue = new Poly ( in.variableName, new long [in.coeffs.length], in.denominator );
for (int i = 0; i < in.coeffs.length; i++)
{ returnValue.coeffs[i] = mulBy * in.coeffs [i]; };
returnValue = reduce(returnValue);
return returnValue;
}
// Special-case multiplication. Division by a coefficient.
public static Poly divByCoeff(Poly in, long divBy)
{
Poly returnValue = new Poly ( in.variableName, new long [in.coeffs.length], in.denominator );
for (int i = 0; i < in.coeffs.length; i++)
{ returnValue.coeffs[i] = in.coeffs [i] / divBy; };
returnValue = reduce(returnValue);
return returnValue;
}
// Special-case multiplication. Multiplication by "x", variableName
public static Poly mulByx(Poly in, String "x")
{
Poly returnValue = new Poly ( mulByx.variableName, new long [mulByx.coeffs.length + 1], mulByx.denominator);
returnValue.coeffs[0] = 0;
for (int i = 0; i < coeffs.length; i++)
{ returnValue.coeffs[i+1] = coeffs[i]; };
return returnValue;
}
// Start of utility functions called by tickable functions.
//
//
//
//
//
//
//
//
// Function to calculate the Highest Common Factor (Greatest Common Divisor) of 2 integers.
public static long hcf(long m, long n)
{
if (m == 0) return n;
if (n == 0) return m;
return hcf(n,m%n);
}
// Function to reduce a polynomial to its simplest terms.
public static Poly reduce(Poly in)
{
Poly returnValue = new Poly ( in.variableName, new long [in.coeffs.length], in.denominator );
long divisor = in.denominator;
for (int i = 0; i < in.coeffs.length; i++)
{ divisor = hcf(in.coeffs[i],divisor); };
for (int i = 0; i < in.coeffs.length; i++)
{ returnValue.coeffs[i] = in.coeffs [i] / divisor; };
returnValue.denominator = in.denominator / divisor;
return returnValue;
}
// Start of Main method
public static void main(String[] args)
{
String a = "x";
long[] b = {2,8,16};
long c = 2;
Poly test = new Poly(a,b,c);
System.out.printf("Polynomial is " + test.debugPrint() + "%n");
System.out.printf("HCF of 12 and 16 is " + hcf(12,16) + "%n");
System.out.printf("Simplified polynomial is " + reduce(test).debugPrint() + "%n");
System.out.printf("Polynomial multiplied by 4 is " + mulByCoeff(test,4).debugPrint() + "%n");
System.out.printf("Polynomial divided by 4 is " + divByCoeff(test,4).debugPrint() + "%n");
}
}