Changeset 21b8f4 in git
- Timestamp:
- Jul 25, 2011, 4:08:17 PM (12 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'f875bbaccd0831e36aaed09ff6adeb3eb45aeb94')
- Children:
- 3dd0640ba1b8ca0d5fc4aa74c81faaa7eb5129fc
- Parents:
- 64a5014602570d17e143cbe6e31d19fd6a86cfc3
- Location:
- factory
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
factory/cf_algorithm.cc
r64a501 r21b8f4 386 386 //}}} 387 387 388 /// same as fdivides if true returns quotient quot of g by f otherwise quot == 0 389 bool 390 fdivides ( const CanonicalForm & f, const CanonicalForm & g, CanonicalForm& quot ) 391 { 392 quot= 0; 393 // trivial cases 394 if ( g.isZero() ) 395 return true; 396 else if ( f.isZero() ) 397 return false; 398 399 if ( (f.inCoeffDomain() || g.inCoeffDomain()) 400 && ((getCharacteristic() == 0 && isOn( SW_RATIONAL )) 401 || (getCharacteristic() > 0 && CFFactory::gettype() != PrimePowerDomain)) ) 402 { 403 // if we are in a field all elements not equal to zero are units 404 if ( f.inCoeffDomain() ) 405 { 406 quot= g/f; 407 return true; 408 } 409 else 410 // g.inCoeffDomain() 411 return false; 412 } 413 414 // we may assume now that both levels either equal LEVELBASE 415 // or are greater zero 416 int fLevel = f.level(); 417 int gLevel = g.level(); 418 if ( (gLevel > 0) && (fLevel == gLevel) ) 419 // f and g are polynomials in the same main variable 420 if ( degree( f ) <= degree( g ) 421 && fdivides( f.tailcoeff(), g.tailcoeff() ) 422 && fdivides( f.LC(), g.LC() ) ) 423 { 424 CanonicalForm q, r; 425 if (divremt( g, f, q, r ) && r.isZero()) 426 { 427 quot= q; 428 return true; 429 } 430 else 431 return false; 432 } 433 else 434 return false; 435 else if ( gLevel < fLevel ) 436 // g is a coefficient w.r.t. f 437 return false; 438 else 439 { 440 // either f is a coefficient w.r.t. polynomial g or both 441 // f and g are from a base domain (should be Z or Z/p^n, 442 // then) 443 CanonicalForm q, r; 444 if (divremt( g, f, q, r ) && r.isZero()) 445 { 446 quot= q; 447 return true; 448 } 449 else 450 return false; 451 } 452 } 453 388 454 /// same as fdivides but handles zero divisors in Z_p[t]/(f)[x1,...,xn] for reducible f 389 455 bool -
factory/cf_algorithm.h
r64a501 r21b8f4 41 41 42 42 bool fdivides ( const CanonicalForm & f, const CanonicalForm & g ); 43 44 bool fdivides ( const CanonicalForm & f, const CanonicalForm & g, CanonicalForm& quot ); 43 45 44 46 bool tryFdivides ( const CanonicalForm & f, const CanonicalForm & g, const CanonicalForm& M, bool& fail ); -
factory/facAlgExt.cc
r64a501 r21b8f4 156 156 bool save_rat=!isOn (SW_RATIONAL); 157 157 On (SW_RATIONAL); 158 CanonicalForm buf= F/Lc (F);158 CanonicalForm quot, buf= F/Lc (F); 159 159 CFFList factors; 160 160 int multi; … … 163 163 multi= 0; 164 164 i.getItem() /= Lc (i.getItem()); //make factors monic 165 while (fdivides (i.getItem(), buf ))165 while (fdivides (i.getItem(), buf, quot)) 166 166 { 167 buf /= i.getItem();167 buf= quot; 168 168 multi++; 169 169 } -
factory/facFqBivar.cc
r64a501 r21b8f4 274 274 275 275 CFList result; 276 CanonicalForm buf, buf2 ;276 CanonicalForm buf, buf2, quot; 277 277 278 278 buf= F; … … 334 334 S.removeFirst(); 335 335 g /= content (g, Variable (1)); 336 if (fdivides (g, buf ))336 if (fdivides (g, buf, quot)) 337 337 { 338 338 buf2= g (y - eval, y); … … 343 343 if (degree (buf2, alpha) < degMipoBeta) 344 344 { 345 buf /= g;345 buf= quot; 346 346 LCBuf= LC (buf, Variable (1)); 347 347 recombination= true; … … 354 354 if (!isInExtension (buf2, gamma, k, delta, source, dest)) 355 355 { 356 buf /= g;356 buf= quot; 357 357 LCBuf= LC (buf, Variable (1)); 358 358 recombination= true; … … 461 461 CFList result; 462 462 CanonicalForm LCBuf= LC (F, Variable (1)); 463 CanonicalForm g, buf= F;463 CanonicalForm g, quot, buf= F; 464 464 int * v= new int [T.length()]; 465 465 for (int i= 0; i < T.length(); i++) … … 512 512 S.removeFirst(); 513 513 g /= content (g, Variable (1)); 514 if (fdivides (g, buf)) 514 515 if (fdivides (g, buf, quot)) 515 516 { 516 517 recombination= true; 517 518 result.append (g); 518 buf /= g;519 buf= quot; 519 520 LCBuf= LC (buf, Variable(1)); 520 521 T= Difference (T, S); … … 628 629 CanonicalForm buf= F; 629 630 CanonicalForm LCBuf= LC (buf, Variable (1)); 630 CanonicalForm g ;631 CanonicalForm g, quot; 631 632 CanonicalForm M= power (F.mvar(), deg); 632 633 adaptedLiftBound= 0; … … 645 646 g= mulMod2 (i.getItem(), LCBuf, M); 646 647 g /= content (g, Variable (1)); 647 if (fdivides (g, buf ))648 if (fdivides (g, buf, quot)) 648 649 { 649 650 result.append (g); 650 buf /= g;651 buf= quot; 651 652 d -= degree (g) + degree (LC (g, Variable (1))); 652 653 LCBuf= LC (buf, Variable (1)); … … 703 704 if (!k && beta.level() != 1) 704 705 degMipoBeta= degree (getMipo (beta)); 706 CanonicalForm quot; 705 707 for (CFListIterator i= factors; i.hasItem(); i++) 706 708 { … … 716 718 g= mulMod2 (i.getItem(), LCBuf, M); 717 719 g /= content (g, Variable (1)); 718 if (fdivides (g, buf ))720 if (fdivides (g, buf, quot)) 719 721 { 720 722 buf2= g (y - eval, y); … … 726 728 { 727 729 appendTestMapDown (result, buf2, info, source, dest); 728 buf /= g;730 buf= quot; 729 731 d -= degree (g) + degree (LC (g, Variable (1))); 730 732 LCBuf= LC (buf, Variable (1)); … … 737 739 { 738 740 appendTestMapDown (result, buf2, info, source, dest); 739 buf /= g;741 buf= quot; 740 742 d -= degree (g) + degree (LC (g, Variable (1))); 741 743 LCBuf= LC (buf, Variable (1)); … … 959 961 Variable x= Variable (1); 960 962 CanonicalForm yToL= power (y, liftBound); 963 CanonicalForm quot; 961 964 for (long i= 1; i <= N.NumCols(); i++) 962 965 { … … 987 990 buf= mod (buf, yToL); 988 991 buf /= content (buf, x); 989 if (fdivides (buf, F ))992 if (fdivides (buf, F, quot)) 990 993 { 991 994 factorsFoundIndex[i - 1]= 1; 992 995 factorsFound++; 993 F /= buf;996 F= quot; 994 997 F /= Lc (F); 995 998 reconstructedFactors.append (buf); … … 1013 1016 Variable y= Variable (2); 1014 1017 Variable x= Variable (1); 1018 CanonicalForm quot; 1015 1019 CanonicalForm yToL= power (y, liftBound); 1016 1020 for (long i= 1; i <= N.NumCols(); i++) … … 1042 1046 buf= mod (buf, yToL); 1043 1047 buf /= content (buf, x); 1044 if (fdivides (buf, F ))1048 if (fdivides (buf, F, quot)) 1045 1049 { 1046 1050 factorsFoundIndex[i - 1]= 1; 1047 1051 factorsFound++; 1048 F /= buf;1052 F= quot; 1049 1053 F /= Lc (F); 1050 1054 reconstructedFactors.append (buf); … … 1069 1073 CanonicalForm F= G; 1070 1074 CanonicalForm yToL= power (y, precision); 1075 CanonicalForm quot; 1071 1076 CFList result; 1072 1077 CFList bufFactors= factors; … … 1090 1095 buf= mod (buf, yToL); 1091 1096 buf /= content (buf, x); 1092 if (fdivides (buf, F ))1093 { 1094 F /= buf;1097 if (fdivides (buf, F, quot)) 1098 { 1099 F= quot; 1095 1100 F /= Lc (F); 1096 1101 result.append (buf); … … 1118 1123 CanonicalForm F= G; 1119 1124 CanonicalForm yToL= power (y, precision); 1125 CanonicalForm quot; 1120 1126 CFList result; 1121 1127 CFList bufFactors= factors; … … 1140 1146 buf= mod (buf, yToL); 1141 1147 buf /= content (buf, x); 1142 if (fdivides (buf, F ))1143 { 1144 F /= buf;1148 if (fdivides (buf, F, quot)) 1149 { 1150 F= quot; 1145 1151 F /= Lc (F); 1146 1152 result.append (buf2); … … 1177 1183 CFList bufFactors= factors; 1178 1184 CFList factorsConsidered; 1179 CanonicalForm buf2 ;1185 CanonicalForm buf2, quot; 1180 1186 for (long i= 1; i <= N.NumCols(); i++) 1181 1187 { … … 1201 1207 if (degree (buf2, alpha) < 1) 1202 1208 { 1203 if (fdivides (buf, F ))1204 { 1205 F /= buf;1209 if (fdivides (buf, F, quot)) 1210 { 1211 F= quot; 1206 1212 F /= Lc (F); 1207 1213 result.append (buf2); … … 1216 1222 if (!isInExtension (buf2, gamma, k, delta, source, dest)) 1217 1223 { 1218 if (fdivides (buf, F ))1219 { 1220 F /= buf;1224 if (fdivides (buf, F, quot)) 1225 { 1226 F= quot; 1221 1227 F /= Lc (F); 1222 1228 result.append (buf2); … … 1245 1251 CanonicalForm F= G; 1246 1252 CanonicalForm yToL= power (y, precision); 1253 CanonicalForm quot; 1247 1254 CFList result; 1248 1255 CFList bufFactors= factors; … … 1266 1273 buf= mod (buf, yToL); 1267 1274 buf /= content (buf, x); 1268 if (fdivides (buf, F ))1269 { 1270 F /= buf;1275 if (fdivides (buf, F, quot)) 1276 { 1277 F= quot; 1271 1278 F /= Lc (F); 1272 1279 result.append (buf); … … 1300 1307 CanonicalForm delta= info.getDelta(); 1301 1308 CanonicalForm yToL= power (y, liftBound); 1309 CanonicalForm quot; 1302 1310 CFList source, dest; 1303 1311 for (long i= 1; i <= N.NumCols(); i++) … … 1335 1343 if (degree (buf2, alpha) < 1) 1336 1344 { 1337 if (fdivides (buf, F ))1345 if (fdivides (buf, F, quot)) 1338 1346 { 1339 1347 factorsFoundIndex[i - 1]= 1; 1340 1348 factorsFound++; 1341 F /= buf;1349 F= quot; 1342 1350 F /= Lc (F); 1343 1351 buf2= mapDown (buf2, info, source, dest); … … 1351 1359 if (!isInExtension (buf2, gamma, k, delta, source, dest)) 1352 1360 { 1353 if (fdivides (buf, F ))1361 if (fdivides (buf, F, quot)) 1354 1362 { 1355 1363 factorsFoundIndex[i - 1]= 1; 1356 1364 factorsFound++; 1357 F /= buf;1365 F= quot; 1358 1366 F /= Lc (F); 1359 1367 buf2= mapDown (buf2, info, source, dest); -
factory/facFqBivarUtil.cc
r64a501 r21b8f4 415 415 CFFList result; 416 416 int multi= 0; 417 CanonicalForm quot; 417 418 for (CFListIterator i= factors; i.hasItem(); i++) 418 419 { 419 while (fdivides (i.getItem(), F ))420 while (fdivides (i.getItem(), F, quot)) 420 421 { 421 422 multi++; 422 F /= i.getItem();423 F= quot; 423 424 } 424 425 if (multi > 0) -
factory/facFqFactorize.cc
r64a501 r21b8f4 214 214 215 215 CanonicalForm g, LCBuf= LC (buf, Variable (1)); 216 CanonicalForm buf2 ;216 CanonicalForm buf2, quot; 217 217 int * v= new int [T.length()]; 218 218 for (int i= 0; i < T.length(); i++) … … 255 255 S.removeFirst(); 256 256 g /= myContent (g); 257 if (fdivides (g, buf ))257 if (fdivides (g, buf, quot)) 258 258 { 259 259 buf2= reverseShift (g, evaluation); … … 264 264 { 265 265 appendTestMapDown (result, buf2, info, source, dest); 266 buf /= g;266 buf= quot; 267 267 LCBuf= LC (buf, Variable (1)); 268 268 recombination= true; … … 348 348 Variable y= F.level() - 1; 349 349 bool recombination= false; 350 CanonicalForm h ;350 CanonicalForm h, quot; 351 351 while (T.length() >= 2*s) 352 352 { … … 372 372 S.removeFirst(); 373 373 g /= myContent (g); 374 if (fdivides (g, buf ))374 if (fdivides (g, buf, quot)) 375 375 { 376 376 recombination= true; 377 377 result.append (g); 378 buf /= g;378 buf= quot; 379 379 LCBuf= LC (buf, Variable(1)); 380 380 T= Difference (T, S); … … 416 416 Variable y= F.mvar(); 417 417 CanonicalForm LCBuf= LC (buf, Variable (1)); 418 CanonicalForm g ;418 CanonicalForm g, quot; 419 419 CFList M= MOD; 420 420 M.append (power (y, deg)); … … 426 426 g= mulMod (i.getItem(), LCBuf, M); 427 427 g /= myContent (g); 428 if (fdivides (g, buf ))428 if (fdivides (g, buf, quot)) 429 429 { 430 430 nBuf= degree (g, y) + degree (LC (g, 1), y); 431 431 d -= nBuf; 432 432 e= tmax (e, nBuf); 433 buf /= g;433 buf= quot; 434 434 LCBuf= LC (buf, Variable (1)); 435 435 } … … 485 485 Variable y= F.mvar(); 486 486 CanonicalForm LCBuf= LC (buf, Variable (1)); 487 CanonicalForm g, gg ;487 CanonicalForm g, gg, quot; 488 488 CFList M= MOD; 489 489 M.append (power (y, deg)); … … 501 501 g= mulMod (i.getItem(), LCBuf, M); 502 502 g /= myContent (g); 503 if (fdivides (g, buf ))503 if (fdivides (g, buf, quot)) 504 504 { 505 505 gg= reverseShift (g, eval); … … 509 509 if (degree (gg, alpha) < degMipoBeta) 510 510 { 511 buf /= g;511 buf= quot; 512 512 nBuf= degree (g, y) + degree (LC (g, Variable (1)), y); 513 513 d -= nBuf; … … 520 520 if (!isInExtension (gg, gamma, k, delta, source, dest)) 521 521 { 522 buf /= g;522 buf= quot; 523 523 nBuf= degree (g, y) + degree (LC (g, Variable (1)), y); 524 524 d -= nBuf; … … 576 576 Variable y= F.mvar(); 577 577 CanonicalForm LCBuf= LC (buf, Variable (1)); 578 CanonicalForm g ;578 CanonicalForm g, quot; 579 579 CFList M= MOD; 580 580 M.append (power (y, deg)); … … 587 587 g= mulMod (i.getItem(), LCBuf, M); 588 588 g /= myContent (g); 589 if (fdivides (g, buf ))589 if (fdivides (g, buf, quot)) 590 590 { 591 591 result.append (g); … … 593 593 d -= nBuf; 594 594 e= tmax (e, nBuf); 595 buf /= g;595 buf= quot; 596 596 LCBuf= LC (buf, Variable (1)); 597 597 T= Difference (T, CFList (i.getItem())); … … 631 631 Variable y= F.mvar(); 632 632 CanonicalForm LCBuf= LC (buf, Variable (1)); 633 CanonicalForm g, gg ;633 CanonicalForm g, gg, quot; 634 634 CFList M= MOD; 635 635 M.append (power (y, deg)); … … 648 648 g= mulMod (i.getItem(), LCBuf, M); 649 649 g /= myContent (g); 650 if (fdivides (g, buf ))650 if (fdivides (g, buf, quot)) 651 651 { 652 652 gg= reverseShift (g, eval); … … 657 657 { 658 658 appendTestMapDown (result, gg, info, source, dest); 659 buf /= g;659 buf= quot; 660 660 nBuf= degree (g, y) + degree (LC (g, Variable (1)), y); 661 661 d -= nBuf; … … 670 670 { 671 671 appendTestMapDown (result, gg, info, source, dest); 672 buf /= g;672 buf= quot; 673 673 nBuf= degree (g, y) + degree (LC (g, Variable (1)), y); 674 674 d -= nBuf; … … 1166 1166 const CFList& M) 1167 1167 { 1168 CanonicalForm buf= F;1168 CanonicalForm quot, buf= F; 1169 1169 CanonicalForm LCBuf= LC (buf, 1); 1170 1170 … … 1176 1176 tmp= mulMod (tmp, LCBuf, M); 1177 1177 tmp= tmp/content (tmp, 1); 1178 if (fdivides (tmp, buf ))1179 { 1180 buf /= tmp;1178 if (fdivides (tmp, buf, quot)) 1179 { 1180 buf= quot; 1181 1181 result.append (tmp); 1182 1182 LCBuf= LC (buf, 1); … … 1935 1935 int s= 1; 1936 1936 CFList result; 1937 CanonicalForm buf= F;1937 CanonicalForm quot, buf= F; 1938 1938 1939 1939 CanonicalForm g; … … 1976 1976 g= prod (S); 1977 1977 g /= myContent (g); 1978 if (fdivides (g, buf ))1978 if (fdivides (g, buf, quot)) 1979 1979 { 1980 1980 buf2= reverseShift (g, evaluation); … … 1985 1985 { 1986 1986 appendTestMapDown (result, buf2, info, source, dest); 1987 buf /= g;1987 buf= quot; 1988 1988 recombination= true; 1989 1989 trueFactor= true; … … 1995 1995 { 1996 1996 appendTestMapDown (result, buf2, info, source, dest); 1997 buf /= g;1997 buf= quot; 1998 1998 recombination= true; 1999 1999 trueFactor= true; -
factory/facHensel.cc
r64a501 r21b8f4 1774 1774 bufFactors [k]= i.getItem(); 1775 1775 } 1776 CanonicalForm b ;1776 CanonicalForm b, quot; 1777 1777 for (k= 0; k < factors.length(); k++) //TODO compute b's faster 1778 1778 { 1779 1779 b= 1; 1780 if (fdivides (bufFactors[k], F ))1781 b= F/bufFactors[k];1780 if (fdivides (bufFactors[k], F, quot)) 1781 b= quot; 1782 1782 else 1783 1783 { … … 1863 1863 for (CFListIterator i= factors; i.hasItem(); i++, k++) 1864 1864 bufFactors [k]= i.getItem(); 1865 CanonicalForm b ;1865 CanonicalForm b, quot; 1866 1866 CFList buf= M; 1867 1867 buf.removeLast(); … … 1870 1870 { 1871 1871 b= 1; 1872 if (fdivides (bufFactors[k], F ))1873 b= F/bufFactors[k];1872 if (fdivides (bufFactors[k], F, quot)) 1873 b= quot; 1874 1874 else 1875 1875 { … … 2909 2909 2910 2910 CFList products; 2911 CanonicalForm quot; 2911 2912 for (int i= 0; i < bufFactors.size(); i++) 2912 2913 { 2913 2914 if (degree (bufFactors[i], y) > 0) 2914 2915 { 2915 if (!fdivides (bufFactors[i] [0], F.getFirst() ))2916 if (!fdivides (bufFactors[i] [0], F.getFirst(), quot)) 2916 2917 { 2917 2918 bad= true; 2918 2919 return CFList(); 2919 2920 } 2920 products.append ( F.getFirst()/bufFactors[i] [0]);2921 } 2922 else 2923 { 2924 if (!fdivides (bufFactors[i], F.getFirst() ))2921 products.append (quot); 2922 } 2923 else 2924 { 2925 if (!fdivides (bufFactors[i], F.getFirst(), quot)) 2925 2926 { 2926 2927 bad= true; 2927 2928 return CFList(); 2928 2929 } 2929 products.append ( F.getFirst()/bufFactors[i]);2930 products.append (quot); 2930 2931 } 2931 2932 } … … 3136 3137 3137 3138 CFList products; 3138 CanonicalForm bufF= F.getFirst();3139 CanonicalForm quot, bufF= F.getFirst(); 3139 3140 3140 3141 for (int i= 0; i < bufFactors.size(); i++) … … 3142 3143 if (degree (bufFactors[i], y) > 0) 3143 3144 { 3144 if (!fdivides (bufFactors[i] [0], bufF ))3145 if (!fdivides (bufFactors[i] [0], bufF, quot)) 3145 3146 { 3146 3147 noOneToOne= true; 3147 3148 return factors; 3148 3149 } 3149 products.append ( bufF/bufFactors[i] [0]);3150 } 3151 else 3152 { 3153 if (!fdivides (bufFactors[i], bufF ))3150 products.append (quot); 3151 } 3152 else 3153 { 3154 if (!fdivides (bufFactors[i], bufF, quot)) 3154 3155 { 3155 3156 noOneToOne= true; 3156 3157 return factors; 3157 3158 } 3158 products.append ( bufF/bufFactors[i]);3159 products.append (quot); 3159 3160 } 3160 3161 } -
factory/fac_distrib.cc
r64a501 r21b8f4 66 66 DEBINCLEVEL( cerr, "distributeLeadingCoeffs" ); 67 67 CanonicalForm ut, gt, d, ft; 68 CanonicalForm dd ;68 CanonicalForm dd, quot; 69 69 CFFListIterator I; 70 70 int m, j, i; … … 85 85 ut = lc( G[j] ); 86 86 DEBOUTLN( cerr, "checking with " << ut ); 87 while ( m > 0 && fdivides( D[i], ut ) )87 while ( m > 0 && fdivides( D[i], ut, quot ) ) 88 88 { 89 89 DEBOUTLN( cerr, "match found" ); 90 m--; ut /= D[i];90 m--; ut= quot; 91 91 lcG[j] *= ft; 92 92 } … … 136 136 return; 137 137 } 138 CanonicalForm h, f = F;138 CanonicalForm h, quot, f = F; 139 139 CFListIterator i, j; 140 140 for ( i = L; i.hasItem() && ! f.isOne(); ) … … 146 146 continue; 147 147 } 148 while ( fdivides( h, f ) )149 f /= h;148 while ( fdivides( h, f, quot ) ) 149 f= quot; 150 150 CFList D( h ); 151 151 gfbAdjoin( i.getItem() / h, D );
Note: See TracChangeset
for help on using the changeset viewer.