Changeset 70bf04b in git


Ignore:
Timestamp:
Mar 21, 2013, 11:39:03 AM (10 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', '5a0dde71de01068fad5736a17555c993ecbbf495')
Children:
675c62cd9015e53f77b1f57146d0d5098bcb42e1
Parents:
2d35fe77fb45655052d739f5e90e572b52fe709f
git-author:
Martin Lee <martinlee84@web.de>2013-03-21 11:39:03+01:00
git-committer:
Martin Lee <martinlee84@web.de>2013-03-22 15:53:43+01:00
Message:
fix: bug in hensel lifting part1
File:
1 edited

Legend:

Unmodified
Added
Removed
  • factory/facHensel.cc

    r2d35fe r70bf04b  
    77 *
    88 * ABSTRACT: Hensel lifting is described in "Efficient Multivariate
    9  * Factorization over Finite Fields" by L. Bernardin & M. Monagon. Division with
    10  * remainder is described in "Fast Recursive Division" by C. Burnikel and
    11  * J. Ziegler. Karatsuba multiplication is described in "Modern Computer
    12  * Algebra" by J. von zur Gathen and J. Gerhard.
     9 * Factorization over Finite Fields" by L. Bernardin & M. Monagon.
    1310 *
    1411 * @author Martin Lee
     
    17581755      M (j + 2, 1)= mulNTL (bufFactors[0] [j + 1], bufFactors[1] [j + 1]);
    17591756  }
     1757  else
     1758    M (j + 1, 1)= 0;
     1759
    17601760  CanonicalForm uIZeroJ;
    17611761  if (degBuf0 > 0 && degBuf1 > 0)
    1762     uIZeroJ= mulNTL(bufFactors[0][0],buf[1])+mulNTL (bufFactors[1][0], buf[0]);
     1762    uIZeroJ= mulNTL(bufFactors[0][0], buf[1]) +
     1763             mulNTL (bufFactors[1][0], buf[0]);
    17631764  else if (degBuf0 > 0)
    1764     uIZeroJ= mulNTL (buf[0], bufFactors[1]);
     1765    uIZeroJ= mulNTL (buf[0], bufFactors[1]) +
     1766             mulNTL (buf[1], bufFactors[0][0]);
    17651767  else if (degBuf1 > 0)
    1766     uIZeroJ= mulNTL (bufFactors[0], buf [1]);
     1768    uIZeroJ= mulNTL (bufFactors[0], buf[1]) +
     1769             mulNTL (buf[0], bufFactors[1][0]);
    17671770  else
    1768     uIZeroJ= 0;
     1771    uIZeroJ= mulNTL (bufFactors[0], buf[1]) +
     1772             mulNTL (buf[0], bufFactors[1]);
     1773
    17691774  Pi [0] += xToJ*uIZeroJ;
    17701775
     
    17811786    for (k= 1; k <= (int) ceil (j/2.0); k++)
    17821787    {
    1783       if (one.hasTerms() && two.hasTerms())
    1784       {
    1785         if (k != j - k + 1)
    1786         {
    1787           if ((one.hasTerms() && one.exp() == j - k + 1) && +
    1788               (two.hasTerms() && two.exp() == j - k + 1))
     1788      if (k != j - k + 1)
     1789      {
     1790        if ((one.hasTerms() && one.exp() == j - k + 1) && +
     1791            (two.hasTerms() && two.exp() == j - k + 1))
    17891792        {
    17901793          tmp[0] += mulNTL ((bufFactors[0][k]+one.coeff()),(bufFactors[1][k] +
    1791                       two.coeff())) - M (k + 1, 1) - M (j - k + 2, 1);
     1794                    two.coeff())) - M (k + 1, 1) - M (j - k + 2, 1);
    17921795          one++;
    17931796          two++;
     
    17961799        {
    17971800          tmp[0] += mulNTL ((bufFactors[0][k]+one.coeff()), bufFactors[1] [k]) -
    1798                       M (k + 1, 1);
     1801                    M (k + 1, 1);
    17991802          one++;
    18001803        }
     
    18081811      else
    18091812        tmp[0] += M (k + 1, 1);
    1810       }
    18111813    }
    18121814  }
     
    18471849        M (j + 2, l + 1)= mulNTL (Pi [l - 1][j + 1], bufFactors[l + 1] [j + 1]);
    18481850    }
     1851    else
     1852      M (j + 1, l + 1)= 0;
    18491853
    18501854    if (degPi > 0 && degBuf > 0)
    1851       uIZeroJ= mulNTL (Pi[l -1] [0], buf[l + 1]) +
     1855      uIZeroJ= mulNTL (Pi[l - 1] [0], buf[l + 1]) +
    18521856               mulNTL (uIZeroJ, bufFactors[l+1] [0]);
    18531857    else if (degPi > 0)
    1854       uIZeroJ= mulNTL (uIZeroJ, bufFactors[l + 1]);
     1858      uIZeroJ= mulNTL (uIZeroJ, bufFactors[l + 1]) +
     1859               mulNTL (Pi[l - 1][0], buf[l + 1]);
    18551860    else if (degBuf > 0)
    1856       uIZeroJ= mulNTL (Pi[l - 1], buf[l+1]);
    1857     else
    1858       uIZeroJ= 0;
     1861      uIZeroJ= mulNTL (uIZeroJ, bufFactors[l + 1][0]) +
     1862               mulNTL (Pi[l - 1], buf[l + 1]);
     1863    else
     1864      uIZeroJ= mulNTL (uIZeroJ, bufFactors[l + 1]) +
     1865               mulNTL (Pi[l - 1], buf[l + 1]);
    18591866
    18601867    Pi [l] += xToJ*uIZeroJ;
Note: See TracChangeset for help on using the changeset viewer.