Changeset 327efa2 in git for factory/facFactorize.cc
- Timestamp:
- Sep 14, 2011, 2:38:38 PM (13 years ago)
- Branches:
- (u'spielwiese', '17f1d200f27c5bd38f5dfc6e8a0879242279d1d8')
- Children:
- 09723d9937585aae280f53597c2c61b2b3e6304a
- Parents:
- 725e6002e0b07ad1474e14f72296c0c85a47ae4d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
factory/facFactorize.cc
r725e600 r327efa2 202 202 for (iter= bufSqrfFactors [i]; iter.hasItem(); iter++) 203 203 { 204 if (iter.getItem().factor().inCoeffDomain()) 205 continue; 204 206 iter.getItem()= CFFactor (iter.getItem().factor()/ 205 207 Lc (iter.getItem().factor()), … … 212 214 for (iter= bufSqrfFactors [i]; iter.hasItem(); iter++) 213 215 { 216 if (iter.getItem().factor().inCoeffDomain()) 217 continue; 214 218 iter.getItem()= CFFactor (iter.getItem().factor()/ 215 219 Lc (iter.getItem().factor()), … … 388 392 factors= bufFactors; 389 393 390 int liftBound= degree (sqrfPartF,2) + degree (LC (sqrfPartF, 1), 2) + 1;391 392 int* liftBounds= liftingBounds (sqrfPartF, liftBound);393 394 394 395 bufFactors= factors; 395 factors.insert (LC (evalSqrfPartF.getFirst(), 1)); 396 CFMatrix M= CFMatrix (liftBound, factors.length() - 1); 397 CFArray Pi; 398 CFList diophant; 399 henselLift12 (evalSqrfPartF.getFirst(), factors, liftBound, Pi, diophant, M, 400 false); 401 402 if (sqrfPartF.level() > 2) 403 factors= henselLift (evalSqrfPartF, factors, liftBounds, 404 sqrfPartF.level() - 1, false); 405 406 CFList MOD; 407 for (int i= 0; i < sqrfPartF.level() - 1; i++) 408 MOD.append (power (Variable (i + 2), liftBounds [i])); 409 410 CFList interMedResult= leadingCoeffReconstruction (evalSqrfPartF.getLast(), 411 factors, MOD); 396 397 if (factors.length() > 1) 398 { 399 CanonicalForm LC1= LC (evalSqrfPartF.getFirst(), 1); 400 401 CFArray leadingCoeffs= CFArray (factors.length()); 402 for (int i= 0; i < factors.length(); i++) 403 leadingCoeffs[i]= LC1; 404 for (CFListIterator i= factors; i.hasItem(); i++) 405 i.getItem() *= LC1 (0,2)/Lc (i.getItem()); 406 factors.insert (1); 407 408 CanonicalForm 409 newSqrfPartF= evalSqrfPartF.getFirst()*power (LC1, factors.length() - 2); 410 411 int liftBound= degree (newSqrfPartF,2) + 1; 412 413 CFMatrix M= CFMatrix (liftBound, factors.length() - 1); 414 CFArray Pi; 415 CFList diophant; 416 henselLift122 (newSqrfPartF, factors, liftBound, Pi, diophant, M, 417 leadingCoeffs, false); 418 419 if (sqrfPartF.level() > 2) 420 { 421 int* liftBounds= new int [sqrfPartF.level() - 1]; 422 liftBounds [0]= liftBound; 423 bool noOneToOne= false; 424 CFList *leadingCoeffs2= new CFList [sqrfPartF.level()-2]; 425 LC1= LC (evalSqrfPartF.getLast(), 1); 426 CFList LCs; 427 for (int i= 0; i < factors.length(); i++) 428 LCs.append (LC1); 429 leadingCoeffs2 [sqrfPartF.level() - 3]= LCs; 430 for (int i= sqrfPartF.level() - 1; i > 2; i--) 431 { 432 for (CFListIterator j= LCs; j.hasItem(); j++) 433 j.getItem()= j.getItem() (0, i + 1); 434 leadingCoeffs2 [i - 3]= LCs; 435 } 436 sqrfPartF= sqrfPartF*power (LC1, factors.length()-1); 437 438 int liftBoundsLength= sqrfPartF.level() - 1; 439 for (int i= 1; i < liftBoundsLength; i++) 440 liftBounds [i]= degree (sqrfPartF, i + 2) + 1; 441 evalSqrfPartF= evaluateAtZero (sqrfPartF); 442 evalSqrfPartF.removeFirst(); 443 factors= nonMonicHenselLift (evalSqrfPartF, factors, leadingCoeffs2, 444 diophant, Pi, liftBounds, sqrfPartF.level() - 1, noOneToOne); 445 delete [] leadingCoeffs2; 446 delete [] liftBounds; 447 } 448 } 449 else 450 factors= evalSqrfPartF.getLast(); 451 452 CFList interMedResult= recoverFactors (evalSqrfPartF.getLast(), factors); 412 453 413 454 CFList result;
Note: See TracChangeset
for help on using the changeset viewer.