File: binomial.cpp

package info (click to toggle)
gfan 0.5%2Bdfsg-5
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 8,296 kB
  • ctags: 5,612
  • sloc: cpp: 39,675; makefile: 453; sh: 1
file content (43 lines) | stat: -rw-r--r-- 1,043 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "binomial.h"
#include "field_zmodpz.h"

IntegerVector binomialToIntegerVector(Polynomial const &p)
{
  if(p.isZero())
    {
      assert(0); // There is no way of finding the dimension!!
      return IntegerVector(0);
    }
  assert(p.numberOfTerms()==2);

  assert(p.isMarked());

  IntegerVector markedExponent=p.getMarked().m.exponent;

  IntegerVector ret;
  for(TermMap::const_iterator j=p.terms.begin();j!=p.terms.end();j++)
    {
      IntegerVector dif=markedExponent-j->first.exponent;
      
      if(!dif.isZero())
	{
	  ret=dif;
	}
    }
  return ret;
}


Polynomial integerVectorToBinomial(IntegerVector const &v, PolynomialRing const &r)
{
  IntegerVector pos=max(v,IntegerVector(v.size()));
  IntegerVector neg=pos-v;
  Field field=r.getField();
  //  if(!field)field=theZMod2ZField();//should this be changed to the global field??
  Term a(field.zHomomorphism(1),Monomial(r,pos));
  Term b(field.zHomomorphism(-1),Monomial(r,neg));
  Polynomial p=Polynomial(a)+Polynomial(b);
  p.mark(Monomial(r,pos));

  return p;
}