/** Copyright Henry Bottomley March 2002*/ import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.lang.Math; import java.math.BigInteger; public class partition extends Applet implements ActionListener {TextField box0, messagebox; Button calculate; public void init() { box0 = new TextField(6); add (box0); calculate = new Button("Calculate partitions"); calculate.addActionListener(this); add (calculate); messagebox = new TextField(50); add (messagebox); } public void actionPerformed(ActionEvent event) {String arg=event.getActionCommand(); if (arg=="Calculate partitions") { int n=Integer.parseInt(box0.getText().trim()); int depent = (int) Math.sqrt(1.0d+n); int signArray[] = new int[2*depent+2]; int pentArray[] = new int[2*depent+2]; signArray[0]=-1; signArray[1]=1; pentArray[0]=0; pentArray[1]=1; for (int i=1; i<=depent; i++) { signArray[2*i]=-signArray[2*i-2]; signArray[2*i+1]=-signArray[2*i-1]; pentArray[2*i]=(i*(3*i+1))/2; pentArray[2*i+1]=((i+1)*(3*i+2))/2; } BigInteger partitionArray[] = new BigInteger[n+1]; partitionArray[0]=BigInteger.valueOf(1l); for (int j=1; j<=n; j++) {BigInteger partSum=BigInteger.valueOf(0l); for (int k=1; pentArray[k]<=j; k++) {if (signArray[k]==1) {partSum = partSum.add(partitionArray[j-pentArray[k]]); } else {partSum = partSum.subtract(partitionArray[j-pentArray[k]]); } } messagebox.setText(Integer.toString(j)); partitionArray[j] = partSum; } // end of j loop messagebox.setText(Integer.toString(n) + " " + partitionArray[n].toString()); } // end of calculate partitions } // end of actionPerormed } // end of class partition