Changeset 38ffb7 in git for factory/facFqFactorize.cc
- Timestamp:
- Sep 2, 2011, 11:41:32 AM (13 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 96f9fdfab406c4f1b69b407c26a25d199352b8c5
- Parents:
- 0349c206d67778742e0d31e4173c6f30b493a2a8
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
factory/facFqFactorize.cc
r0349c20 r38ffb7 1171 1171 CFList result; 1172 1172 1173 CanonicalForm tmp; 1173 1174 for (CFListIterator i= factors; i.hasItem(); i++) 1174 1175 { 1175 CanonicalFormtmp= i.getItem();1176 tmp= i.getItem(); 1176 1177 tmp= mulMod (tmp, LCBuf, M); 1177 1178 tmp= tmp/content (tmp, 1); … … 1197 1198 int n= 1; 1198 1199 int m; 1199 for (CFFListIterator i= factors1; (i.hasItem() && n < k); i++, n++) 1200 CFFListIterator j; 1201 for (CFFListIterator i= factors1; (n < k && i.hasItem()); i++, n++) 1200 1202 { 1201 1203 m= 1; 1202 for ( CFFListIterator j= factors2; (j.hasItem() && m < l); j++, m++)1203 { 1204 CanonicalFormg= gcd (i.getItem().factor(), j.getItem().factor());1204 for (j= factors2; (m < l && j.hasItem()); j++, m++) 1205 { 1206 g= gcd (i.getItem().factor(), j.getItem().factor()); 1205 1207 if (degree (g) > 0) 1206 1208 { … … 1253 1255 } 1254 1256 1257 Variable v; 1258 CFListIterator iter1; 1259 CanonicalForm tmp, g; 1255 1260 for (int i= 0; i < length; i++) 1256 1261 { 1257 1262 if (differentSecondVarFactors[i].isEmpty()) 1258 1263 continue; 1259 CFListIteratoriter1= l;1264 iter1= l; 1260 1265 iter1++; 1261 1266 1262 Variablev= Variable (i + 3);1267 v= Variable (i + 3); 1263 1268 for (CFListIterator iter2= differentSecondVarFactors[i]; iter2.hasItem(); 1264 1269 iter2++, iter1++) … … 1266 1271 if (degree (iter2.getItem(),v) == degree (iter1.getItem(),v)) 1267 1272 continue; 1268 CanonicalFormtmp= iter1.getItem();1273 tmp= iter1.getItem(); 1269 1274 for (int j= tmp.level(); j > 1; j--) 1270 1275 { … … 1273 1278 tmp= tmp (0, j); 1274 1279 } 1275 CanonicalFormg= gcd (iter2.getItem(), content);1280 g= gcd (iter2.getItem(), content); 1276 1281 if (degree (g) > 0) 1277 1282 { … … 1306 1311 CFFList*& bufSqrfFactors, CFList& evalSqrfPartF) 1307 1312 { 1313 CanonicalForm tmp; 1314 CFListIterator j; 1308 1315 for (CFListIterator i= uniFactors; i.hasItem(); i++) 1309 1316 { 1310 CanonicalFormtmp= i.getItem();1317 tmp= i.getItem(); 1311 1318 if (i.hasItem()) 1312 1319 i++; 1313 1320 else 1314 1321 break; 1315 for ( CFListIteratorj= i; j.hasItem(); j++)1322 for (j= i; j.hasItem(); j++) 1316 1323 { 1317 1324 if (tmp == j.getItem()) … … 1338 1345 int k= 0; 1339 1346 factors= uniFactors; 1347 CFFListIterator iter; 1340 1348 for (CFListIterator i= factors; i.hasItem(); i++, k++) 1341 1349 { 1342 CanonicalFormtmp= 1;1350 tmp= 1; 1343 1351 sqrfFactors= squarefreeFactorization (i.getItem(), alpha); 1344 1352 1345 for ( CFFListIterator j= sqrfFactors; j.hasItem(); j++)1346 { 1347 tmp2.append ( j.getItem().factor());1348 tmp *= j.getItem().factor();1353 for (iter= sqrfFactors; iter.hasItem(); iter++) 1354 { 1355 tmp2.append (iter.getItem().factor()); 1356 tmp *= iter.getItem().factor(); 1349 1357 } 1350 1358 i.getItem()= tmp/Lc(tmp); … … 1354 1362 for (int i= 0; i < factors.length() - 1; i++) 1355 1363 { 1356 for ( intk= i + 1; k < factors.length(); k++)1364 for (k= i + 1; k < factors.length(); k++) 1357 1365 { 1358 1366 gcdFreeBasis (bufSqrfFactors [i], bufSqrfFactors[k]); … … 1365 1373 if (i == 0) 1366 1374 { 1367 for (CFFListIterator k= bufSqrfFactors [i]; k.hasItem(); k++) 1368 { 1369 k.getItem()= CFFactor (k.getItem().factor()/Lc (k.getItem().factor()), 1370 k.getItem().exp()); 1371 factors.append (k.getItem().factor()); 1375 for (iter= bufSqrfFactors [i]; iter.hasItem(); iter++) 1376 { 1377 iter.getItem()= CFFactor (iter.getItem().factor()/ 1378 Lc (iter.getItem().factor()), 1379 iter.getItem().exp()); 1380 factors.append (iter.getItem().factor()); 1372 1381 } 1373 1382 } 1374 1383 else 1375 1384 { 1376 for (CFFListIterator k= bufSqrfFactors [i]; k.hasItem(); k++) 1377 { 1378 k.getItem()= CFFactor (k.getItem().factor()/Lc (k.getItem().factor()), 1379 k.getItem().exp()); 1380 if (!find (factors, k.getItem().factor())) 1381 factors.append (k.getItem().factor()); 1385 for (iter= bufSqrfFactors [i]; iter.hasItem(); iter++) 1386 { 1387 iter.getItem()= CFFactor (iter.getItem().factor()/ 1388 Lc (iter.getItem().factor()), 1389 iter.getItem().exp()); 1390 if (!find (factors, iter.getItem().factor())) 1391 factors.append (iter.getItem().factor()); 1382 1392 } 1383 1393 } … … 1385 1395 1386 1396 test= prod (factors); 1387 CanonicalFormtmp= evalSqrfPartF.getFirst() (0,2);1397 tmp= evalSqrfPartF.getFirst() (0,2); 1388 1398 if (test/Lc (test) != tmp/Lc (tmp)) 1389 1399 return 0; … … 1430 1440 else 1431 1441 { 1442 CFListIterator j; 1432 1443 for (int i= 0; i < length; i++) 1433 1444 { 1434 for ( CFListIteratorj= differentSecondVarLCs[i]; j.hasItem(); j++)1445 for (j= differentSecondVarLCs[i]; j.hasItem(); j++) 1435 1446 { 1436 1447 if (j.getItem().level() == LCFLevel) … … 1468 1479 CFFList * bufSqrfFactors= new CFFList [factors.length()]; 1469 1480 CFList evalSqrfPartF; 1470 CanonicalForm bufContent;1471 1481 CFList bufFactors; 1472 1482 int pass= testFactors (F, factors, alpha, sqrfPartF, … … 1489 1499 } 1490 1500 } 1501 CFListIterator iter; 1502 CFList bufBufFactors; 1503 CanonicalForm bufF; 1491 1504 for (int i= 0; i < length; i++) 1492 1505 { … … 1494 1507 { 1495 1508 bool allConstant= true; 1496 for (CFListIterator iter= differentSecondVarLCs[i]; iter.hasItem(); 1497 iter++) 1509 for (iter= differentSecondVarLCs[i]; iter.hasItem(); iter++) 1498 1510 { 1499 1511 if (!iter.getItem().inCoeffDomain()) … … 1507 1519 1508 1520 bufFactors= differentSecondVarLCs [i]; 1509 for ( CFListIteratoriter= bufFactors; iter.hasItem(); iter++)1521 for (iter= bufFactors; iter.hasItem(); iter++) 1510 1522 iter.getItem()= swapvar (iter.getItem(), x, y); 1511 CanonicalFormbufF= F;1523 bufF= F; 1512 1524 z= Variable (y.level() - lev); 1513 1525 bufF= swapvar (bufF, x, z); 1514 CFListbufBufFactors= bufFactors;1526 bufBufFactors= bufFactors; 1515 1527 pass= testFactors (bufF, bufBufFactors, alpha, sqrfPartF, bufFactors, 1516 1528 bufSqrfFactors, evalSqrfPartF); … … 1520 1532 F= bufF; 1521 1533 CFList l= factors; 1522 for ( CFListIteratoriter= l; iter.hasItem(); iter++)1534 for (iter= l; iter.hasItem(); iter++) 1523 1535 iter.getItem()= swapvar (iter.getItem(), x, y); 1524 1536 differentSecondVarLCs [i]= l; … … 1573 1585 1574 1586 CFList result; 1587 CFFListIterator k; 1575 1588 for (int i= 0; i < LCFFactors.length(); i++) 1576 1589 { 1577 1590 CanonicalForm tmp= 1; 1578 for ( CFFListIteratork= bufSqrfFactors[i]; k.hasItem(); k++)1591 for (k= bufSqrfFactors[i]; k.hasItem(); k++) 1579 1592 { 1580 1593 int pos= findItem (bufFactors, k.getItem().factor()); … … 1634 1647 const CanonicalForm& A) 1635 1648 { 1649 CanonicalForm tmp; 1650 CFList tmp2; 1651 CFListIterator iter; 1636 1652 for (int i= A.level(); i > 2; i--) 1637 1653 { 1638 CanonicalFormtmp= A;1639 CFListtmp2= CFList();1640 CFListIteratoriter= evaluation;1654 tmp= A; 1655 tmp2= CFList(); 1656 iter= evaluation; 1641 1657 bool preserveDegree= true; 1642 1658 for (int j= A.level(); j > 1; j--, iter++) … … 1748 1764 minFactorsLength= 0; 1749 1765 irred= false; 1766 CFList factors; 1767 Variable v; 1750 1768 for (int j= 0; j < A.level() - 2; j++) 1751 1769 { 1752 1770 if (!Aeval[j].isEmpty()) 1753 1771 { 1754 Variable v= Variable (Aeval[j].getFirst().level()); 1755 1756 CFList factors; 1772 v= Variable (Aeval[j].getFirst().level()); 1757 1773 if (CFFactory::gettype() == GaloisFieldDomain) 1758 1774 factors= GFBiSqrfFactorize (Aeval[j].getFirst()); … … 1783 1799 ) 1784 1800 { 1801 CanonicalForm evalPoint; 1802 int i; 1803 CFListIterator iter, iter2; 1804 Variable v; 1805 CFList l, LCs; 1806 CanonicalForm buf; 1785 1807 for (int j= 0; j < A.level() - 2; j++) 1786 1808 { 1787 1809 if (!Aeval[j].isEmpty()) 1788 1810 { 1789 int i= A.level(); 1790 CanonicalForm evalPoint; 1791 for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--) 1811 i= A.level(); 1812 for (iter= evaluation; iter.hasItem(); iter++, i--) 1792 1813 { 1793 1814 if (i == Aeval[j].getFirst().level()) … … 1798 1819 } 1799 1820 1800 Variablev= Variable (i);1821 v= Variable (i); 1801 1822 if (Aeval[j].length() > uniFactors.length()) 1802 1823 Aeval[j]= recombination (Aeval[j], uniFactors, 1, … … 1804 1825 evalPoint, v); 1805 1826 1806 CFList l; 1807 CanonicalForm buf; 1808 for (CFListIterator iter1= uniFactors; iter1.hasItem(); iter1++) 1809 { 1810 for (CFListIterator iter2= Aeval[j]; iter2.hasItem(); iter2++) 1827 l= CFList(); 1828 for (iter= uniFactors; iter.hasItem(); iter++) 1829 { 1830 for (iter2= Aeval[j]; iter2.hasItem(); iter2++) 1811 1831 { 1812 1832 buf= mod (iter2.getItem(), v - evalPoint); 1813 1833 buf /= Lc (buf); 1814 if (iter 1.getItem() == buf)1834 if (iter.getItem() == buf) 1815 1835 { 1816 1836 l.append (iter2.getItem()); … … 1821 1841 Aeval [j]= l; 1822 1842 1823 CFList LCs;1824 for ( CFListIteratoriter= Aeval[j]; iter.hasItem(); iter++)1843 LCs= CFList(); 1844 for (iter= Aeval[j]; iter.hasItem(); iter++) 1825 1845 LCs.append (LC (iter.getItem() (v + evalPoint, v), 1)); 1826 1846 normalize (LCs); … … 1849 1869 int minFactorsLength) 1850 1870 { 1871 CFListIterator iter; 1872 CanonicalForm evalPoint; 1873 int i; 1874 Variable v; 1875 Variable y= Variable (2); 1876 CFList list; 1851 1877 for (int j= 0; j < A.level() - 2; j++) 1852 1878 { 1853 1879 if (Aeval[j].length() == minFactorsLength) 1854 1880 { 1855 i nt i= A.level();1856 CanonicalForm evalPoint; 1857 for ( CFListIteratoriter= evaluation; iter.hasItem(); iter++, i--)1881 i= A.level(); 1882 1883 for (iter= evaluation; iter.hasItem(); iter++, i--) 1858 1884 { 1859 1885 if (i == Aeval[j].getFirst().level()) … … 1864 1890 } 1865 1891 1866 Variable v= Variable (i); 1867 CFList list= buildUniFactors (Aeval[j], evalPoint, v); 1868 1869 Variable y= Variable (2); 1892 v= Variable (i); 1893 list= buildUniFactors (Aeval[j], evalPoint, v); 1894 1870 1895 biFactors= recombination (biFactors, list, 1, 1871 1896 biFactors.length() - list.length() + 1, … … 1881 1906 CFList l= leadingCoeffs; 1882 1907 LCs [n-3]= l; 1908 CFListIterator j; 1883 1909 for (int i= n - 1; i > 2; i--) 1884 1910 { 1885 for ( CFListIteratorj= l; j.hasItem(); j++)1911 for (j= l; j.hasItem(); j++) 1886 1912 j.getItem()= j.getItem() (0, i + 1); 1887 1913 LCs [i - 3]= l; … … 1897 1923 { 1898 1924 ii= normalizeFactor; 1899 for ( CFListIteratorj= LCs [i]; j.hasItem(); j++, ii++)1925 for (j= LCs [i]; j.hasItem(); j++, ii++) 1900 1926 j.getItem() *= ii.getItem(); 1901 1927 }
Note: See TracChangeset
for help on using the changeset viewer.