Changeset 311902 in git for ntl/src/ZZ_pXFactoring.c
- Timestamp:
- Sep 14, 2004, 5:07:14 PM (20 years ago)
- Branches:
- (u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b4f17ed1d25f93d46dbe29e4b499baecc2fd51bb')
- Children:
- 3dc8190053bae3cfc78bef27aa2b85939c7ee5ed
- Parents:
- eb5966cd0255f880eee6d8155b270910331bcba8
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ntl/src/ZZ_pXFactoring.c
reb5966 r311902 92 92 for (k = 0; k < n; k++) { 93 93 94 if (verbose && k % 10 == 0) cerr << "+";95 96 94 pos = -1; 97 95 for (i = l; i < n; i++) { … … 164 162 set(h); 165 163 for (j = 0; j < n; j++) { 166 if (verbose && j % 10 == 0) cerr << "+";167 164 168 165 m = deg(h); … … 391 388 ZZ_pX g, h; 392 389 393 if (verbose) { cerr << "computing X^p..."; t = GetTime(); }394 390 PowerXMod(g, p, F); 395 if (verbose) { cerr << (GetTime()-t) << "\n"; }396 391 397 392 vec_long D; … … 400 395 vec_ZZVec M; 401 396 402 if (verbose) { cerr << "building matrix..."; t = GetTime(); }403 397 BuildMatrix(M, n, g, F, verbose); 404 if (verbose) { cerr << (GetTime()-t) << "\n"; } 405 406 if (verbose) { cerr << "diagonalizing..."; t = GetTime(); } 398 407 399 NullSpace(r, D, M, verbose); 408 if (verbose) { cerr << (GetTime()-t) << "\n"; } 409 410 411 if (verbose) cerr << "number of factors = " << r << "\n"; 400 412 401 413 402 if (r == 1) { … … 416 405 return; 417 406 } 418 419 if (verbose) { cerr << "factor extraction..."; t = GetTime(); }420 407 421 408 vec_ZZ_p roots; … … 432 419 433 420 while (factors.length() < r) { 434 if (verbose) cerr << "+";435 421 RandomBasisElt(g, D, M); 436 422 S.kill(); … … 456 442 } 457 443 458 if (verbose) { cerr << (GetTime()-t) << "\n"; }459 460 if (verbose) {461 cerr << "degrees:";462 long i;463 for (i = 0; i < factors.length(); i++)464 cerr << " " << deg(factors[i]);465 cerr << "\n";466 }467 444 } 468 445 … … 478 455 479 456 480 if (verbose) { cerr << "square-free decomposition..."; t = GetTime(); }481 457 SquareFreeDecomp(sfd, f); 482 if (verbose) cerr << (GetTime()-t) << "\n";483 458 484 459 factors.SetLength(0); … … 487 462 488 463 for (i = 0; i < sfd.length(); i++) { 489 if (verbose) {490 cerr << "factoring multiplicity " << sfd[i].b491 << ", deg = " << deg(sfd[i].a) << "\n";492 }493 464 494 465 SFBerlekamp(x, sfd[i].a, verbose); … … 504 475 void AddFactor(vec_pair_ZZ_pX_long& factors, const ZZ_pX& g, long d, long verbose) 505 476 { 506 if (verbose)507 cerr << "degree=" << d << ", number=" << deg(g)/d << "\n";508 477 append(factors, cons(g, d)); 509 478 } … … 516 485 { 517 486 if (limit == 0) return; 518 519 if (verbose) cerr << "+";520 487 521 488 ZZ_pX t1; … … 771 738 double t; 772 739 773 if (verbose) { cerr << "finding roots..."; t = GetTime(); }774 740 FindRoots(roots, f); 775 if (verbose) { cerr << (GetTime()-t) << "\n"; }776 741 777 742 long r = roots.length(); … … 808 773 ZZ_pX bb; 809 774 810 if (verbose) cerr << "+";811 812 775 EDFSplit(v, f, b, d); 813 776 for (i = 0; i < v.length(); i++) { … … 854 817 855 818 856 double t;857 if (verbose) {858 cerr << "computing EDF(" << d << "," << r << ")...";859 t = GetTime();860 }861 862 819 factors.SetLength(0); 863 820 864 821 RecEDF(factors, f, b, d, verbose); 865 822 866 if (verbose) cerr << (GetTime()-t) << "\n";867 823 } 868 824 … … 898 854 ZZ_pX h; 899 855 900 if (verbose) { cerr << "computing X^p..."; t = GetTime(); }901 856 PowerXMod(h, p, F); 902 if (verbose) { cerr << (GetTime()-t) << "\n"; }903 857 904 858 vec_pair_ZZ_pX_long u; 905 if (verbose) { cerr << "computing DDF..."; t = GetTime(); }906 859 NewDDF(u, f, h, verbose); 907 if (verbose) {908 t = GetTime()-t;909 cerr << "DDF time: " << t << "\n";910 }911 860 912 861 ZZ_pX hh; … … 952 901 953 902 954 if (verbose) { cerr << "square-free decomposition..."; t = GetTime(); }955 903 SquareFreeDecomp(sfd, f); 956 if (verbose) cerr << (GetTime()-t) << "\n";957 904 958 905 factors.SetLength(0); … … 961 908 962 909 for (i = 0; i < sfd.length(); i++) { 963 if (verbose) {964 cerr << "factoring multiplicity " << sfd[i].b965 << ", deg = " << deg(sfd[i].a) << "\n";966 }967 910 968 911 SFCanZass(x, sfd[i].a, verbose); … … 1478 1421 static vec_ZZ_pX GiantStepFile; 1479 1422 1480 static long use_files;1481 1482 1483 1423 1484 1424 static … … 1499 1439 1500 1440 { 1501 double t;1502 1503 if (verbose) { cerr << "generating baby steps..."; t = GetTime(); }1504 1505 1441 ZZ_pXModulus F; 1506 1442 build(F, f); … … 1514 1450 long i; 1515 1451 1516 if (!use_files) {1517 1452 BabyStepFile.kill(); 1518 1453 BabyStepFile.SetLength(k-1); 1519 }1520 1454 1521 1455 for (i = 1; i <= k-1; i++) { 1522 if (use_files) {1523 ofstream s;1524 OpenWrite(s, FileName(ZZ_pX_stem, "baby", i));1525 s << h1 << "\n";1526 s.close();1527 }1528 else1529 1456 BabyStepFile(i) = h1; 1530 1457 1531 1458 CompMod(h1, h1, H, F); 1532 if (verbose) cerr << "+"; 1533 } 1534 1535 if (verbose) 1536 cerr << (GetTime()-t) << "\n"; 1459 } 1460 1537 1461 } 1538 1462 … … 1541 1465 void GenerateGiantSteps(const ZZ_pX& f, const ZZ_pX& h, long l, long verbose) 1542 1466 { 1543 1544 double t;1545 1546 if (verbose) { cerr << "generating giant steps..."; t = GetTime(); }1547 1467 1548 1468 ZZ_pXModulus F; … … 1558 1478 long i; 1559 1479 1560 if (!use_files) {1561 1480 GiantStepFile.kill(); 1562 1481 GiantStepFile.SetLength(l); 1563 }1564 1482 1565 1483 for (i = 1; i <= l-1; i++) { 1566 if (use_files) {1567 ofstream s;1568 OpenWrite(s, FileName(ZZ_pX_stem, "giant", i));1569 s << h1 << "\n";1570 s.close();1571 }1572 else1573 1484 GiantStepFile(i) = h1; 1574 1485 1575 1486 CompMod(h1, h1, H, F); 1576 if (verbose) cerr << "+"; 1577 } 1578 1579 if (use_files) { 1580 ofstream s; 1581 OpenWrite(s, FileName(ZZ_pX_stem, "giant", i)); 1582 s << h1 << "\n"; 1583 s.close(); 1584 } 1585 else 1487 } 1488 1586 1489 GiantStepFile(i) = h1; 1587 1490 1588 if (verbose)1589 cerr << (GetTime()-t) << "\n";1590 1491 } 1591 1492 … … 1593 1494 void FileCleanup(long k, long l) 1594 1495 { 1595 if (use_files) {1596 long i;1597 1598 for (i = 1; i <= k-1; i++)1599 remove(FileName(ZZ_pX_stem, "baby", i));1600 1601 for (i = 1; i <= l; i++)1602 remove(FileName(ZZ_pX_stem, "giant", i));1603 }1604 else {1605 1496 BabyStepFile.kill(); 1606 1497 GiantStepFile.kill(); 1607 }1608 1498 } 1609 1499 … … 1618 1508 u[len].b = m; 1619 1509 1620 if (verbose) {1621 cerr << "split " << m << " " << deg(g) << "\n";1622 }1623 1510 } 1624 1511 … … 1675 1562 void FetchGiantStep(ZZ_pX& g, long gs, const ZZ_pXModulus& F) 1676 1563 { 1677 if (use_files) {1678 ifstream s;1679 1680 OpenRead(s, FileName(ZZ_pX_stem, "giant", gs));1681 1682 s >> g;1683 s.close();1684 }1685 else1686 1564 g = GiantStepFile(gs); 1687 1565 … … 1699 1577 long i; 1700 1578 for (i = 1; i <= k-1; i++) { 1701 if (use_files) {1702 ifstream s;1703 OpenRead(s, FileName(ZZ_pX_stem, "baby", i));1704 s >> v[i];1705 s.close();1706 }1707 else1708 1579 v[i] = BabyStepFile(i); 1709 1580 } … … 1717 1588 1718 1589 { 1719 double t;1720 1721 if (verbose) {1722 cerr << "giant refine...";1723 t = GetTime();1724 }1725 1726 1590 u.SetLength(0); 1727 1591 … … 1765 1629 } 1766 1630 1767 if (verbose && bs == 0) cerr << "+";1768 1769 1631 if (size == ZZ_pX_GCDTableSize && bs == 0) { 1770 1632 NewProcessTable(u, f, F, buf, size, first_gs, k, verbose); 1771 if (verbose) cerr << "*";1772 1633 size = 0; 1773 1634 } … … 1786 1647 if (size > 0) { 1787 1648 NewProcessTable(u, f, F, buf, size, first_gs, k, verbose); 1788 if (verbose) cerr << "*";1789 1649 } 1790 1650 … … 1792 1652 NewAddFactor(u, f, 0, verbose); 1793 1653 1794 if (verbose) {1795 t = GetTime()-t;1796 cerr << "giant refine time: " << t << "\n";1797 }1798 1654 } 1799 1655 … … 1860 1716 1861 1717 { 1862 double t;1863 1864 if (verbose) {1865 cerr << "baby refine...";1866 t = GetTime();1867 }1868 1718 1869 1719 factors.SetLength(0); … … 1884 1734 } 1885 1735 } 1886 1887 if (verbose) {1888 t = GetTime()-t;1889 cerr << "baby refine time: " << t << "\n";1890 }1891 1736 } 1892 1737 … … 1925 1770 ZZ_pX h1; 1926 1771 1927 if (CalcTableSize(deg(f), k + l - 1) > ZZ_pXFileThresh)1928 use_files = 1;1929 else1930 use_files = 0;1931 1932 1933 1772 GenerateBabySteps(h1, f, h, k, verbose); 1934 1773
Note: See TracChangeset
for help on using the changeset viewer.