Changeset 5dad7c7 in git for factory/facFactorize.cc
- Timestamp:
- Aug 21, 2012, 4:37:56 PM (11 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a800fe4b3e9d37a38c5a10cc0ae9dfa0c15a4ee6')
- Children:
- c89740c263a7f55af9bd2cdbff4e77573d7eb82e
- Parents:
- 589ef64cf8eb3dc278fc36630707eda2b0125578
- git-author:
- Martin Lee <martinlee84@web.de>2012-08-21 16:37:56+02:00
- git-committer:
- Martin Lee <martinlee84@web.de>2012-09-04 18:01:19+02:00
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
factory/facFactorize.cc
r589ef64 r5dad7c7 703 703 CFList biFactors, bufBiFactors; 704 704 CanonicalForm evalPoly; 705 int lift, bufLift ;706 CFList* bufAeval2= new CFList [ A.level() -2];707 CFList* Aeval2= new CFList [ A.level() -2];705 int lift, bufLift, lengthAeval2= A.level()-2; 706 CFList* bufAeval2= new CFList [lengthAeval2]; 707 CFList* Aeval2= new CFList [lengthAeval2]; 708 708 int counter; 709 709 int differentSecondVar= 0; … … 755 755 biFactors= bufBiFactors; 756 756 lift= bufLift; 757 for (int j= 0; j < A.level() -2; j++)757 for (int j= 0; j < lengthAeval2; j++) 758 758 Aeval2 [j]= bufAeval2 [j]; 759 759 differentSecondVar= counter; … … 769 769 biFactors= bufBiFactors; 770 770 lift= bufLift; 771 for (int j= 0; j < A.level() -2; j++)771 for (int j= 0; j < lengthAeval2; j++) 772 772 Aeval2 [j]= bufAeval2 [j]; 773 773 differentSecondVar= counter; … … 803 803 refineBiFactors (A, biFactors, Aeval2, evaluation, minFactorsLength); 804 804 805 if (differentSecondVar == A.level() -2 && getNumVars(LC(A,1)) == A.level()-1)805 if (differentSecondVar == lengthAeval2 && getNumVars(LC(A,1)) == A.level()-1) 806 806 { 807 807 bool zeroOccured= false; … … 833 833 CFList uniFactors= buildUniFactors (biFactors, evaluation.getLast(), y); 834 834 835 sortByUniFactors (Aeval2, A.level() -2, uniFactors, evaluation);836 837 CFList * oldAeval= new CFList [ A.level() -2];838 for (int i= 0; i < A.level() -2; i++)835 sortByUniFactors (Aeval2, lengthAeval2, uniFactors, evaluation); 836 837 CFList * oldAeval= new CFList [lengthAeval2]; 838 for (int i= 0; i < lengthAeval2; i++) 839 839 oldAeval[i]= Aeval2[i]; 840 840 … … 847 847 Variable w; 848 848 CFList leadingCoeffs= precomputeLeadingCoeff (LC (A, 1), biFactorsLCs, 849 evaluation, Aeval2, A.level() -2, w);849 evaluation, Aeval2, lengthAeval2, w); 850 850 851 851 if (w.level() != 1) … … 865 865 } 866 866 } 867 for (i= 0; i < A.level() -2; i++)867 for (i= 0; i < lengthAeval2; i++) 868 868 { 869 869 if (oldAeval[i].isEmpty()) … … 918 918 919 919 //prepare leading coefficients 920 CFList* leadingCoeffs2= new CFList [ A.level() -2];920 CFList* leadingCoeffs2= new CFList [lengthAeval2]; 921 921 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, biFactors, 922 922 evaluation); … … 933 933 934 934 CFListIterator iter2; 935 CFList bufLeadingCoeffs2= leadingCoeffs2[ A.level()-3];935 CFList bufLeadingCoeffs2= leadingCoeffs2[lengthAeval2-1]; 936 936 bufBiFactors= biFactors; 937 937 bufA= A; 938 938 CanonicalForm bufLCmultiplier= LCmultiplier; 939 CanonicalForm testVars; 940 if (!LCmultiplierIsConst) 941 { 942 testVars= Variable (2); 943 for (int i= 0; i < lengthAeval2; i++) 944 { 945 if (!oldAeval[i].isEmpty()) 946 testVars *= oldAeval[i].getFirst().mvar(); 947 } 948 } 939 949 CFList bufFactors= CFList(); 940 950 bool LCheuristic= false; 941 if (LucksWangSparseHeuristic (A, biFactors, 2, leadingCoeffs2 [A.level() - 3],951 if (LucksWangSparseHeuristic (A, biFactors, 2, leadingCoeffs2[lengthAeval2-1], 942 952 factors)) 943 953 { … … 973 983 iter++; 974 984 iter.remove (1); 975 for (int j= 0; j < A.level() -2; j++)985 for (int j= 0; j < lengthAeval2; j++) 976 986 { 977 987 l= leadingCoeffs2[j]; … … 988 998 factors= CFList(); 989 999 } 990 else if (!LCmultiplier .inCoeffDomain()&& factors.length() == 0)1000 else if (!LCmultiplierIsConst && factors.length() == 0) 991 1001 { 992 1002 LCheuristic= true; … … 1005 1015 foundTrueMultiplier= true; 1006 1016 int index2= 1; 1007 for (iter2= leadingCoeffs2[ A.level()-3]; iter2.hasItem(); iter2++,1017 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); iter2++, 1008 1018 index2++) 1009 1019 { … … 1013 1023 } 1014 1024 A= oldA; 1015 leadingCoeffs= leadingCoeffs2[ A.level()-3];1016 for (int i= A.level()-3; i > -1; i--)1025 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 1026 for (int i= lengthAeval2-1; i > -1; i--) 1017 1027 leadingCoeffs2[i]= CFList(); 1018 1028 prepareLeadingCoeffs (leadingCoeffs2, A.level(), leadingCoeffs, … … 1044 1054 { 1045 1055 int index2= 1; 1046 for (CFListIterator iter3= leadingCoeffs2[ A.level()-3];1056 for (CFListIterator iter3= leadingCoeffs2[lengthAeval2-1]; 1047 1057 iter3.hasItem(); iter3++, index2++) 1048 1058 { … … 1073 1083 { 1074 1084 int index2= 1; 1075 for (iter2= leadingCoeffs2[ A.level()-3]; iter2.hasItem();1085 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 1076 1086 iter2++, index2++) 1077 1087 { … … 1087 1097 iter.getItem()= 1; 1088 1098 } 1089 else //factor consists of just leading coeff1099 else if (fdivides (getVars (LCmultiplier), testVars))//factor consists of just leading coeff 1090 1100 { 1091 1101 Variable xx= Variable (2); … … 1093 1103 vars= power (xx, degree (LC (getItem(oldBiFactors, index),1), 1094 1104 xx)); 1095 for (int i= 0; i < A.level() -2; i++)1105 for (int i= 0; i < lengthAeval2; i++) 1096 1106 { 1097 1107 if (oldAeval[i].isEmpty()) … … 1101 1111 xx)); 1102 1112 } 1103 if (myGetVars(content(getItem(leadingCoeffs2[ A.level()-3],index),1))1113 if (myGetVars(content(getItem(leadingCoeffs2[lengthAeval2-1],index),1)) 1104 1114 /myGetVars (LCmultiplier) == vars) 1105 1115 { 1106 1116 int index2= 1; 1107 for (iter2= leadingCoeffs2[ A.level()-3]; iter2.hasItem();1117 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 1108 1118 iter2++, index2++) 1109 1119 { … … 1128 1138 { 1129 1139 A= oldA; 1130 iter2= leadingCoeffs2[ A.level()-3];1140 iter2= leadingCoeffs2[lengthAeval2-1]; 1131 1141 for (iter= contents; iter.hasItem(); iter++, iter2++) 1132 1142 iter2.getItem() /= iter.getItem(); 1133 1143 foundMultiplier= true; 1134 1144 } 1135 if (!foundMultiplier )1145 if (!foundMultiplier && fdivides (getVars (LCmultiplier), testVars)) 1136 1146 { 1137 1147 Variable xx; … … 1144 1154 for (iter= oldBiFactors; iter.hasItem(); iter++) 1145 1155 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 1146 for (int i= 0; i < A.level() -2; i++)1156 for (int i= 0; i < lengthAeval2; i++) 1147 1157 { 1148 1158 if (oldAeval[i].isEmpty()) … … 1155 1165 CanonicalForm tmp; 1156 1166 iter2= vars1; 1157 for (iter= leadingCoeffs2[ A.level()-3]; iter.hasItem(); iter++,1167 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, 1158 1168 iter2++) 1159 1169 { … … 1189 1199 { 1190 1200 int index2= 1; 1191 for (iter2= leadingCoeffs2[ A.level()-3]; iter2.hasItem();1201 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 1192 1202 iter2++, index2++) 1193 1203 { … … 1233 1243 { 1234 1244 int index2= 1; 1235 for (iter2= leadingCoeffs2[ A.level()-3]; iter2.hasItem();1245 for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem(); 1236 1246 iter2++, index2++) 1237 1247 { … … 1268 1278 1269 1279 // patch everything together again 1270 leadingCoeffs= leadingCoeffs2[ A.level()-3];1271 for (int i= A.level()-3; i > -1; i--)1280 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 1281 for (int i= lengthAeval2-1; i > -1; i--) 1272 1282 leadingCoeffs2[i]= CFList(); 1273 1283 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, … … 1283 1293 } 1284 1294 factors= CFList(); 1285 if (!fdivides (LC (oldA,1),prod (leadingCoeffs2[ A.level()-3])))1295 if (!fdivides (LC (oldA,1),prod (leadingCoeffs2[lengthAeval2-1]))) 1286 1296 { 1287 1297 LCheuristic= false; 1288 1298 A= bufA; 1289 1299 biFactors= bufBiFactors; 1290 leadingCoeffs2[ A.level()-3]= bufLeadingCoeffs2;1300 leadingCoeffs2[lengthAeval2-1]= bufLeadingCoeffs2; 1291 1301 LCmultiplier= bufLCmultiplier; 1292 1302 } … … 1296 1306 delete [] index; 1297 1307 } 1298 if (!LCheuristic && !LCmultiplierIsConst && bufFactors.isEmpty()) 1308 if (!LCheuristic && !LCmultiplierIsConst && bufFactors.isEmpty() 1309 && fdivides (getVars (LCmultiplier), testVars)) 1299 1310 { 1300 1311 int index; … … 1308 1319 for (iter= oldBiFactors; iter.hasItem(); iter++) 1309 1320 vars1.append (power (xx, degree (LC (iter.getItem(),1), xx))); 1310 for (int i= 0; i < A.level() -2; i++)1321 for (int i= 0; i < lengthAeval2; i++) 1311 1322 { 1312 1323 if (oldAeval[i].isEmpty()) … … 1319 1330 CanonicalForm tmp; 1320 1331 iter2= vars1; 1321 for (iter= leadingCoeffs2[ A.level()-3]; iter.hasItem(); iter++, iter2++)1332 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, iter2++) 1322 1333 { 1323 1334 tmp= iter.getItem()/LCmultiplier; … … 1349 1360 { 1350 1361 int index2= 1; 1351 for (iter2= leadingCoeffs2[ A.level()-3]; iter2.hasItem();iter2++,1362 for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++, 1352 1363 index2++) 1353 1364 { … … 1389 1400 { 1390 1401 int index2= 1; 1391 for (iter2= leadingCoeffs2[ A.level()-3]; iter2.hasItem();iter2++,1402 for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++, 1392 1403 index2++) 1393 1404 { … … 1420 1431 } 1421 1432 1422 leadingCoeffs= leadingCoeffs2[ A.level()-3];1423 for (int i= A.level()-3; i > -1; i--)1433 leadingCoeffs= leadingCoeffs2[lengthAeval2-1]; 1434 for (int i= lengthAeval2-1; i > -1; i--) 1424 1435 leadingCoeffs2[i]= CFList(); 1425 1436 prepareLeadingCoeffs (leadingCoeffs2,A.level(),leadingCoeffs, biFactors, … … 1442 1453 iter.getItem()= iter.getItem () (y + evaluation.getLast(), y); 1443 1454 1444 for (int i= 0; i < A.level() - 3; i++)1455 for (int i= 0; i < lengthAeval2-1; i++) 1445 1456 leadingCoeffs2[i]= CFList(); 1446 for (iter= leadingCoeffs2[ A.level() - 3]; iter.hasItem(); iter++)1457 for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++) 1447 1458 { 1448 1459 iter.getItem()= shift2Zero (iter.getItem(), list, evaluation); 1449 1460 for (int i= A.level() - 4; i > -1; i--) 1450 1461 { 1451 if (i + 1 == A.level() - 3)1462 if (i + 1 == lengthAeval2-1) 1452 1463 leadingCoeffs2[i].append (iter.getItem() (0, i + 4)); 1453 1464 else … … 1470 1481 commonDenominators.append (bCommonDen (iter.getItem())); 1471 1482 CanonicalForm tmp1, tmp2, tmp3=1; 1472 for (int i= 0; i < A.level() -2; i++)1483 for (int i= 0; i < lengthAeval2; i++) 1473 1484 { 1474 1485 iter2= commonDenominators; … … 1498 1509 iter.getItem() *= tmp3*power (multiplier, biFactors.length() - 1); 1499 1510 1500 for (int i= 0; i < A.level() -2; i++)1511 for (int i= 0; i < lengthAeval2; i++) 1501 1512 { 1502 1513 iter2= commonDenominators; … … 1525 1536 A= bufA; 1526 1537 biFactors= bufBiFactors; 1527 leadingCoeffs2[ A.level()-3]= bufLeadingCoeffs2;1538 leadingCoeffs2[lengthAeval2-1]= bufLeadingCoeffs2; 1528 1539 delete [] liftBounds; 1529 1540 LCheuristic= false;
Note: See TracChangeset
for help on using the changeset viewer.