Changeset a090c88 in git


Ignore:
Timestamp:
Feb 16, 2012, 4:26:41 PM (12 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'fc741b6502fd8a97288eaa3eba6e5220f3c3df87')
Children:
667ba13dd7bcac6f144c71d80aad80c7fe86c3cd
Parents:
583cb9fa220ca5d883a84c81ca72035b15d62ec1
git-author:
Martin Lee <martinlee84@web.de>2012-02-16 16:26:41+01:00
git-committer:
Martin Lee <martinlee84@web.de>2012-04-04 14:42:25+02:00
Message:
chg: added coeff bound as additional argument in henselStep12
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/facHensel.cc

    r583cb9 ra090c88  
    503503henselStep12 (const CanonicalForm& F, const CFList& factors,
    504504              CFArray& bufFactors, const CFList& diophant, CFMatrix& M,
    505               CFArray& Pi, int j)
     505              CFArray& Pi, int j, const modpk& b)
    506506{
    507507  CanonicalForm E;
     
    519519  }
    520520
     521  if (b.getp() != 0)
     522    E= b(E);
    521523  CFArray buf= CFArray (diophant.length());
    522524  bufFactors[0]= mod (factors.getFirst(), power (F.mvar(), j + 1));
     
    529531    {
    530532      if (k > 0)
    531         remainder= modNTL (E, bufFactors[k] [0]);
     533        remainder= modNTL (E, bufFactors[k] [0], b);
    532534      else
    533535        remainder= E;
    534536    }
    535537    else
    536       remainder= modNTL (E, bufFactors[k]);
    537 
    538     buf[k]= mulNTL (i.getItem(), remainder);
     538      remainder= modNTL (E, bufFactors[k], b);
     539
     540    buf[k]= mulNTL (i.getItem(), remainder, b);
    539541    if (degree (bufFactors[k], x) > 0)
    540       buf[k]= modNTL (buf[k], bufFactors[k] [0]);
    541     else
    542       buf[k]= modNTL (buf[k], bufFactors[k]);
     542      buf[k]= modNTL (buf[k], bufFactors[k] [0], b);
     543    else
     544      buf[k]= modNTL (buf[k], bufFactors[k], b);
    543545  }
    544546  for (k= 1; k < factors.length(); k++)
     547  {
    545548    bufFactors[k] += xToJ*buf[k];
     549    if (b.getp() != 0)
     550      bufFactors[k]= b(bufFactors[k]);
     551  }
    546552
    547553  // update Pi [0]
     
    549555  int degBuf1= degree (bufFactors[1], x);
    550556  if (degBuf0 > 0 && degBuf1 > 0)
    551     M (j + 1, 1)= mulNTL (bufFactors[0] [j], bufFactors[1] [j]);
     557    M (j + 1, 1)= mulNTL (bufFactors[0] [j], bufFactors[1] [j], b);
    552558  CanonicalForm uIZeroJ;
    553559  if (j == 1)
     
    555561    if (degBuf0 > 0 && degBuf1 > 0)
    556562      uIZeroJ= mulNTL ((bufFactors[0] [0] + bufFactors[0] [j]),
    557                   (bufFactors[1] [0] + buf[1])) - M(1, 1) - M(j + 1, 1);
     563                  (bufFactors[1] [0] + buf[1]), b) - M(1, 1) - M(j + 1, 1);
    558564    else if (degBuf0 > 0)
    559       uIZeroJ= mulNTL (bufFactors[0] [j], bufFactors[1]);
     565      uIZeroJ= mulNTL (bufFactors[0] [j], bufFactors[1], b);
    560566    else if (degBuf1 > 0)
    561       uIZeroJ= mulNTL (bufFactors[0], buf[1]);
     567      uIZeroJ= mulNTL (bufFactors[0], buf[1], b);
    562568    else
    563569      uIZeroJ= 0;
     570    if (b.getp() != 0)
     571      uIZeroJ= b (uIZeroJ);
    564572    Pi [0] += xToJ*uIZeroJ;
     573    if (b.getp() != 0)
     574      Pi [0]= b (Pi[0]);
    565575  }
    566576  else
     
    568578    if (degBuf0 > 0 && degBuf1 > 0)
    569579      uIZeroJ= mulNTL ((bufFactors[0] [0] + bufFactors[0] [j]),
    570                   (bufFactors[1] [0] + buf[1])) - M(1, 1) - M(j + 1, 1);
     580                  (bufFactors[1] [0] + buf[1]), b) - M(1, 1) - M(j + 1, 1);
    571581    else if (degBuf0 > 0)
    572       uIZeroJ= mulNTL (bufFactors[0] [j], bufFactors[1]);
     582      uIZeroJ= mulNTL (bufFactors[0] [j], bufFactors[1], b);
    573583    else if (degBuf1 > 0)
    574       uIZeroJ= mulNTL (bufFactors[0], buf[1]);
     584      uIZeroJ= mulNTL (bufFactors[0], buf[1], b);
    575585    else
    576586      uIZeroJ= 0;
     587    if (b.getp() != 0)
     588      uIZeroJ= b (uIZeroJ);
    577589    Pi [0] += xToJ*uIZeroJ;
     590    if (b.getp() != 0)
     591      Pi [0]= b (Pi[0]);
    578592  }
    579593  CFArray tmp= CFArray (factors.length() - 1);
     
    593607        {
    594608          tmp[0] += mulNTL ((bufFactors[0][k]+one.coeff()), (bufFactors[1][k]+
    595                      two.coeff())) - M (k + 1, 1) - M (j - k + 2, 1);
     609                     two.coeff()), b) - M (k + 1, 1) - M (j - k + 2, 1);
    596610          one++;
    597611          two++;
     
    599613        else if (one.hasTerms() && one.exp() == j - k + 1)
    600614        {
    601           tmp[0] += mulNTL ((bufFactors[0][k]+one.coeff()), bufFactors[1][k])-
    602                     M (k + 1, 1);
     615          tmp[0] += mulNTL ((bufFactors[0][k]+one.coeff()), bufFactors[1][k], b)
     616                    - M (k + 1, 1);
    603617          one++;
    604618        }
    605619        else if (two.hasTerms() && two.exp() == j - k + 1)
    606620        {
    607           tmp[0] += mulNTL (bufFactors[0][k], (bufFactors[1][k]+two.coeff()))-
    608                     M (k + 1, 1);
     621          tmp[0] += mulNTL (bufFactors[0][k], (bufFactors[1][k]+two.coeff()), b)
     622                    - M (k + 1, 1);
    609623          two++;
    610624        }
     
    616630    }
    617631  }
     632  if (b.getp() != 0)
     633    tmp[0]= b (tmp[0]);
    618634  Pi [0] += tmp[0]*xToJ*F.mvar();
    619635
     
    625641    degBuf= degree (bufFactors[l + 1], x);
    626642    if (degPi > 0 && degBuf > 0)
    627       M (j + 1, l + 1)= mulNTL (Pi [l - 1] [j], bufFactors[l + 1] [j]);
     643      M (j + 1, l + 1)= mulNTL (Pi [l - 1] [j], bufFactors[l + 1] [j], b);
    628644    if (j == 1)
    629645    {
    630646      if (degPi > 0 && degBuf > 0)
    631647        Pi [l] += xToJ*(mulNTL (Pi [l - 1] [0] + Pi [l - 1] [j],
    632                   bufFactors[l + 1] [0] + buf[l + 1]) - M (j + 1, l +1) -
     648                  bufFactors[l + 1] [0] + buf[l + 1], b) - M (j + 1, l +1) -
    633649                  M (1, l + 1));
    634650      else if (degPi > 0)
    635         Pi [l] += xToJ*(mulNTL (Pi [l - 1] [j], bufFactors[l + 1]));
     651        Pi [l] += xToJ*(mulNTL (Pi [l - 1] [j], bufFactors[l + 1], b));
    636652      else if (degBuf > 0)
    637         Pi [l] += xToJ*(mulNTL (Pi [l - 1], buf[l + 1]));
     653        Pi [l] += xToJ*(mulNTL (Pi [l - 1], buf[l + 1], b));
    638654    }
    639655    else
     
    641657      if (degPi > 0 && degBuf > 0)
    642658      {
    643         uIZeroJ= mulNTL (uIZeroJ, bufFactors [l + 1] [0]);
    644         uIZeroJ += mulNTL (Pi [l - 1] [0], buf [l + 1]);
     659        uIZeroJ= mulNTL (uIZeroJ, bufFactors [l + 1] [0], b);
     660        uIZeroJ += mulNTL (Pi [l - 1] [0], buf [l + 1], b);
    645661      }
    646662      else if (degPi > 0)
    647         uIZeroJ= mulNTL (uIZeroJ, bufFactors [l + 1]);
     663        uIZeroJ= mulNTL (uIZeroJ, bufFactors [l + 1], b);
    648664      else if (degBuf > 0)
    649665      {
    650         uIZeroJ= mulNTL (uIZeroJ, bufFactors [l + 1] [0]);
    651         uIZeroJ += mulNTL (Pi [l - 1], buf[l + 1]);
     666        uIZeroJ= mulNTL (uIZeroJ, bufFactors [l + 1] [0], b);
     667        uIZeroJ += mulNTL (Pi [l - 1], buf[l + 1], b);
    652668      }
    653669      Pi[l] += xToJ*uIZeroJ;
     
    659675      if (degBuf > 0 && degPi > 0)
    660676      {
    661           tmp[l] += mulNTL (two.coeff(), bufFactors[l + 1][0]);
     677          tmp[l] += mulNTL (two.coeff(), bufFactors[l + 1][0], b);
    662678          two++;
    663679      }
    664680      else if (degPi > 0)
    665681      {
    666           tmp[l] += mulNTL (two.coeff(), bufFactors[l + 1]);
     682          tmp[l] += mulNTL (two.coeff(), bufFactors[l + 1], b);
    667683          two++;
    668684      }
     
    678694          {
    679695            tmp[l] += mulNTL ((bufFactors[l+1][k] + one.coeff()), (Pi[l-1][k] +
    680                        two.coeff())) - M (k + 1, l + 1) - M (j - k + 2, l + 1);
     696                      two.coeff()),b) - M (k + 1, l + 1) - M (j - k + 2, l + 1);
    681697            one++;
    682698            two++;
     
    684700          else if (one.hasTerms() && one.exp() == j - k + 1)
    685701          {
    686             tmp[l] += mulNTL ((bufFactors[l+1][k]+one.coeff()), Pi[l-1][k]) -
     702            tmp[l] += mulNTL ((bufFactors[l+1][k]+one.coeff()), Pi[l-1][k], b) -
    687703                       M (k + 1, l + 1);
    688704            one++;
     
    690706          else if (two.hasTerms() && two.exp() == j - k + 1)
    691707          {
    692             tmp[l] += mulNTL (bufFactors[l+1][k], (Pi[l-1][k] + two.coeff())) -
    693                       M (k + 1, l + 1);
     708            tmp[l] += mulNTL (bufFactors[l+1][k], (Pi[l-1][k] + two.coeff()), b)
     709                      - M (k + 1, l + 1);
    694710            two++;
    695711          }
     
    699715      }
    700716    }
     717    if (b.getp() != 0)
     718      tmp[l]= b (tmp[l]);
    701719    Pi[l] += tmp[l]*xToJ*F.mvar();
    702720  }
     
    712730  Pi= CFArray (factors.length() - 1);
    713731  CFListIterator j= factors;
    714   diophant= diophantine (F[0], factors);
     732  diophant= diophantine (F[0], factors, b);
    715733  DEBOUTLN (cerr, "diophant= " << diophant);
    716734  j++;
    717   Pi [0]= mulNTL (j.getItem(), mod (factors.getFirst(), F.mvar()));
     735  Pi [0]= mulNTL (j.getItem(), mod (factors.getFirst(), F.mvar()), b);
    718736  M (1, 1)= Pi [0];
    719737  int i= 1;
     
    722740  for (; j.hasItem(); j++, i++)
    723741  {
    724     Pi [i]= mulNTL (Pi [i - 1], j.getItem());
     742    Pi [i]= mulNTL (Pi [i - 1], j.getItem(), b);
    725743    M (1, i + 1)= Pi [i];
    726744  }
     
    735753  }
    736754  for (i= 1; i < l; i++)
    737     henselStep12 (F, factors, bufFactors, diophant, M, Pi, i);
     755    henselStep12 (F, factors, bufFactors, diophant, M, Pi, i, b);
    738756
    739757  CFListIterator k= factors;
     
    760778  }
    761779  for (i= start; i < end; i++)
    762     henselStep12 (F, factors, bufFactors, diophant, M, Pi, i);
     780    henselStep12 (F, factors, bufFactors, diophant, M, Pi, i, b);
    763781
    764782  CFListIterator k= factors;
Note: See TracChangeset for help on using the changeset viewer.