/**
	* Classe modelisant un polynome à coefficients entiers
	* Un polynome est caracterise par la suite de ses coefficients
	* Ils sont stockes dans un tableau d'entiers, coefficient de poids faible en premier
	* ex: 3x^2+5x+1 est represente par le tableau [1,5,3]
	* Le premier coefficient ne peut pas etre nul
	*/
	public class Polynome{
		//la liste des coefficients de notre polynome
		int[] coefficients;
		//le degre du polynome;

		/**
		*le constructeur
		*@param t un tableau d'entiers
		*@throws IllegalArgumentException si le premier coefficient de t est nul
		*/
		public Polynome(int[] t){
			coefficients=new int[t.length];
			for(int i=0;i<t.length;i++){
				coefficients[i]=t[i];
			}
		}

		//renvoie le degre du polynome
		//le degré du polynome nul est -1
		public int degre(){
			return coefficients.length-1;
		}

		/**
		*evalue le polynome sur un entier donne
		*@param x l'entier
		*@return int p(x)
		*/
		public int evaluer(int x){
			int p=x;
			int r=0;
			for(int i=this.degre();i>=0;i--){
				r+=coefficients[i]*p;
				p*=x;
			}
			return r;
		}

		/**
		*additionne deux polynome, renvoie le resultat dans un nouveau polynome
		*@param p un polynome
		*@return un polynome
		*/
		public Polynome add(Polynome p){
			int d=this.degre()+1;
			int[] c=new int[d];
			for(int i=0;i<d;i++){
					c[i]+=this.coefficients[i]+p.coefficients[i];
			}
			return new Polynome(c);
		}

		public String toString(){
			if(this.degre()==-1) return 0+"";
			String s=""+coefficients[0];
			for(int i=1;i<=this.degre();i++){
					s+=coefficients[i]+"x^"+i+"+";
			}
			return s;			
		}
	}