/*
 * Created on 17-oct-2006
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author Hogar
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class SumPow {

	public double[][] pows;
	public double[] x;
	public int n;
	
	public SumPow(int pow){
		
		n=pow+1;
		
		x=new double[n];
		pows= new double[n+1][n];
		
	
		
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				pows[j][i]=Math.pow(i+1,j+1);
				}	
			}
		
		for(int k=0;k<n;k++){
			if(k==0){
				pows[n][k]=1;
				}else{
					pows[n][k]=pows[n][k-1] + Math.pow(k+1,n-1);
					}
			}
		
	
		
		for(int k=0;k<n;k++){
			for(int i=k;i<n;i++){
				double piv=pows[k][i];
				for(int j=k;j<n+1;j++){
					pows[j][i]=pows[j][i]/piv;
					}	
				}
			
			for(int i=k;i<n-1;i++){
				for(int j=k;j<n+1;j++){
					pows[j][i+1]=pows[j][k]-pows[j][i+1];
					}	
				
			    }
			
			}
		
		
		for(int k=n-1;k>0;k--){
			for(int i=k;i>0;i--){
				double piv=pows[k][i-1];
				for(int j=k;j<n+1;j++){
					pows[j][i-1]=pows[j][i-1]-(piv*pows[j][k]);
					}	
				}
			}
		
		for(int k=0;k<n;k++){
			x[k]=pows[n][k];
			}
	}
	public void dib(){
		
		for(int i=0;i<n;i++){
			for(int j=0;j<n+1;j++){
				System.out.print(" "+pows[j][i]+",");
				}
			System.out.print(";");
			}
		} 
}
