Changeset ec16f0 in git for factory/facFqFactorize.cc
- Timestamp:
- Dec 5, 2011, 3:43:07 PM (12 years ago)
- Branches:
- (u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', '38dfc5131670d387a89455159ed1e071997eec94')
- Children:
- ce21bd8d333faf7c8f2fcdbd11fa57c0b6ec7776
- Parents:
- 4fe8a30d668fa6f87de68f0c0207d54767119a52
- git-author:
- Martin Lee <martinlee84@web.de>2011-12-05 15:43:07+01:00
- git-committer:
- Oleksandr Motsak <motsak@mathematik.uni-kl.de>2011-12-12 18:00:42+01:00
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
factory/facFqFactorize.cc
r4fe8a3 rec16f0 1605 1605 } 1606 1606 1607 CFList interMedResult; 1608 CanonicalForm oldSqrfPartF= sqrfPartF; 1607 1609 sqrfPartF= shift2Zero (sqrfPartF, evalSqrfPartF, evaluation2, 1); 1608 1610 if (factors.length() > 1) 1609 1611 { 1610 CanonicalForm LC1= LC (evalSqrfPartF.getFirst(), 1); 1611 1612 CFArray leadingCoeffs= CFArray (factors.length()); 1612 CanonicalForm LC1= LC (oldSqrfPartF, 1); 1613 CFList leadingCoeffs; 1613 1614 for (int i= 0; i < factors.length(); i++) 1614 leadingCoeffs[i]= LC1; 1615 1616 for (CFListIterator i= factors; i.hasItem(); i++) 1617 { 1618 i.getItem()= i.getItem() (x + evaluation2.getLast(), x); 1619 i.getItem() *= LC1 (0,2)/Lc (i.getItem()); 1620 } 1621 factors.insert (1); 1622 1623 CanonicalForm 1624 newSqrfPartF= evalSqrfPartF.getFirst()*power (LC1, factors.length() - 2); 1625 1626 int liftBound= degree (newSqrfPartF,2) + 1; 1627 1628 CFMatrix M= CFMatrix (liftBound, factors.length() - 1); 1629 CFArray Pi; 1630 CFList diophant; 1631 henselLift122 (newSqrfPartF, factors, liftBound, Pi, diophant, M, 1632 leadingCoeffs, false); 1633 1634 if (sqrfPartF.level() > 2) 1635 { 1636 int* liftBounds= new int [sqrfPartF.level() - 1]; 1637 liftBounds [0]= liftBound; 1638 bool noOneToOne= false; 1639 CFList *leadingCoeffs2= new CFList [sqrfPartF.level()-2]; 1640 LC1= LC (evalSqrfPartF.getLast(), 1); 1641 CFList LCs; 1615 leadingCoeffs.append (LC1); 1616 1617 CFList LC1eval= evaluateAtEval (LC1, evaluation2, 1); 1618 CFList oldFactors= factors; 1619 for (CFListIterator i= oldFactors; i.hasItem(); i++) 1620 i.getItem() *= LC1eval.getFirst()/Lc (i.getItem()); 1621 1622 bool success= false; 1623 if (LucksWangSparseHeuristic (oldSqrfPartF*power (LC1, factors.length()-1), 1624 oldFactors, 1, leadingCoeffs, factors)) 1625 { 1626 interMedResult= recoverFactors (oldSqrfPartF, factors); 1627 if (oldFactors.length() == interMedResult.length()) 1628 success= true; 1629 } 1630 if (!success) 1631 { 1632 LC1= LC (evalSqrfPartF.getFirst(), 1); 1633 1634 CFArray leadingCoeffs= CFArray (factors.length()); 1642 1635 for (int i= 0; i < factors.length(); i++) 1643 LCs.append (LC1); 1644 leadingCoeffs2 [sqrfPartF.level() - 3]= LCs; 1645 for (int i= sqrfPartF.level() - 1; i > 2; i--) 1646 { 1647 for (CFListIterator j= LCs; j.hasItem(); j++) 1648 j.getItem()= j.getItem() (0, i + 1); 1649 leadingCoeffs2 [i - 3]= LCs; 1650 } 1651 sqrfPartF= sqrfPartF*power (LC1, factors.length()-1); 1652 1653 int liftBoundsLength= sqrfPartF.level() - 1; 1654 for (int i= 1; i < liftBoundsLength; i++) 1655 liftBounds [i]= degree (sqrfPartF, i + 2) + 1; 1656 evalSqrfPartF= evaluateAtZero (sqrfPartF); 1657 evalSqrfPartF.removeFirst(); 1658 factors= nonMonicHenselLift (evalSqrfPartF, factors, leadingCoeffs2, 1659 diophant, Pi, liftBounds, sqrfPartF.level() - 1, noOneToOne); 1660 delete [] leadingCoeffs2; 1661 delete [] liftBounds; 1636 leadingCoeffs[i]= LC1; 1637 1638 for (CFListIterator i= factors; i.hasItem(); i++) 1639 { 1640 i.getItem()= i.getItem() (x + evaluation2.getLast(), x); 1641 i.getItem() *= LC1 (0,2)/Lc (i.getItem()); 1642 } 1643 factors.insert (1); 1644 1645 CanonicalForm 1646 newSqrfPartF= evalSqrfPartF.getFirst()*power (LC1, factors.length() - 2); 1647 1648 int liftBound= degree (newSqrfPartF,2) + 1; 1649 1650 CFMatrix M= CFMatrix (liftBound, factors.length() - 1); 1651 CFArray Pi; 1652 CFList diophant; 1653 henselLift122 (newSqrfPartF, factors, liftBound, Pi, diophant, M, 1654 leadingCoeffs, false); 1655 1656 if (sqrfPartF.level() > 2) 1657 { 1658 int* liftBounds= new int [sqrfPartF.level() - 1]; 1659 liftBounds [0]= liftBound; 1660 bool noOneToOne= false; 1661 CFList *leadingCoeffs2= new CFList [sqrfPartF.level()-2]; 1662 LC1= LC (evalSqrfPartF.getLast(), 1); 1663 CFList LCs; 1664 for (int i= 0; i < factors.length(); i++) 1665 LCs.append (LC1); 1666 leadingCoeffs2 [sqrfPartF.level() - 3]= LCs; 1667 for (int i= sqrfPartF.level() - 1; i > 2; i--) 1668 { 1669 for (CFListIterator j= LCs; j.hasItem(); j++) 1670 j.getItem()= j.getItem() (0, i + 1); 1671 leadingCoeffs2 [i - 3]= LCs; 1672 } 1673 sqrfPartF *= power (LC1, factors.length()-1); 1674 1675 int liftBoundsLength= sqrfPartF.level() - 1; 1676 for (int i= 1; i < liftBoundsLength; i++) 1677 liftBounds [i]= degree (sqrfPartF, i + 2) + 1; 1678 evalSqrfPartF= evaluateAtZero (sqrfPartF); 1679 evalSqrfPartF.removeFirst(); 1680 factors= nonMonicHenselLift (evalSqrfPartF, factors, leadingCoeffs2, 1681 diophant, Pi, liftBounds, sqrfPartF.level() - 1, noOneToOne); 1682 delete [] leadingCoeffs2; 1683 delete [] liftBounds; 1684 } 1685 for (CFListIterator iter= factors; iter.hasItem(); iter++) 1686 iter.getItem()= reverseShift (iter.getItem(), evaluation2, 1); 1687 1688 interMedResult= 1689 recoverFactors (reverseShift(evalSqrfPartF.getLast(),evaluation2,1), 1690 factors); 1662 1691 } 1663 1692 } 1664 1693 else 1665 factors= evalSqrfPartF.getLast(); 1666 1667 for (CFListIterator iter= factors; iter.hasItem(); iter++) 1668 iter.getItem()= reverseShift (iter.getItem(), evaluation2, 1); 1669 1670 CFList interMedResult= 1671 recoverFactors (reverseShift(evalSqrfPartF.getLast(),evaluation2,1), factors); 1694 { 1695 factors= CFList (oldSqrfPartF); 1696 interMedResult= recoverFactors (oldSqrfPartF, factors); 1697 } 1672 1698 1673 1699 CFList result;
Note: See TracChangeset
for help on using the changeset viewer.