public GF2Elem odwrocModulo() throws Exception
	  {
		  int[] u=this.bB;
		  int[] v=new int[u.length];
		  int[] g1=new int[u.length];
		  int[] g2=new int[u.length];
		  int[] temp=new int[u.length];
		  int[] z=new int[u.length];
		  for (int i=0;i<v.length;i++)
		  {
			  v[i]=0;
			  g1[i]=0;
			  g2[i]=0;
			  temp[i]=0;
			  z[i]=0;
		  }
		  v[0]=1;
		  v[this.m]=1;
		  v[this.m-this.k]=1;
		  // Jeli liczby a oraz n (wielomian modulo) nie s wzgldnie pierwsze
		  if (!this.b.gcd(intArraytoBigInteger(v)).equals(BigInteger.ONE))
			  throw new Exception("Wielomian, ktry naley odwrci nie jest wzgldnie pierwszy z wielomianem modulo");
		  g1[m]=1;
		  boolean end=false;
		  int degv,degu,j;
		  while(end==false)
		  {
			  degu=0;degv=0;
			  while(u[degu]==0) 
			  {
				  degu++;
				  if(degu == u.length)
				  {
					  degu=u.length-1;
					  break;
				  }
			  }
			  while(v[degv]==0)
			  {
				  degv++;
				  if(degv == v.length)
				  {
					  degv=v.length-1;
					  break;
				  }
			  }
			  //j=deg(u)-deg(v)
			  degu=this.m-degu;
			  degv=this.m-degv;
			  j=degu-degv;
			  if (j<0)
			  {
				  //u↔v
				  temp=u;
				  u=v;
				  v=temp;
				  //g1↔g2
				  temp=g1;
				  g1=g2;
				  g2=temp;
				  //j<- -j
				  j=0-j;
			  }
			  //u<- u+z^j*v;
			  z[m-j]=1;
			  u=redukuj(dodaj(u,pomnoz(z,v)));
			  //g1<- g1+z^j*g2;
			  g1=redukuj(dodaj(g1,pomnoz(z,g2)));		  
			  //u!=1
			  int sum=0;
			  for (int i=0;i<=m;i++)
				  sum+=u[i];
			  if (u[m]==1)
				  end=true;
			  if (sum==1 && end==true)
				  end=true;
			  else
				  end=false;
			  for (int i=0; i< z.length; i++)
				  z[i]=0;
		  }
		  this.bB = g1;
		  this.b = intArraytoBigInteger(this.bB);
		  return this;
	  }