Changeset 86acc34 in git
- Timestamp:
- May 13, 2014, 3:15:26 PM (10 years ago)
- Branches:
- (u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'fc741b6502fd8a97288eaa3eba6e5220f3c3df87')
- Children:
- 0ac77c459123ddecaf705f0a8aead6339faa5279
- Parents:
- c9f357778ee9f8d227771940ccf22290fb865982
- git-author:
- Martin Lee <martinlee84@web.de>2014-05-13 15:15:26+02:00
- git-committer:
- Martin Lee <martinlee84@web.de>2014-05-21 15:06:53+02:00
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
factory/facAlgFunc.cc
rc9f357 r86acc34 490 490 } 491 491 492 sqrfFactors= sqrf_norm (f, Rstar, vminpoly, s, g, R); 493 494 if (getCharacteristic() > 0) 495 { 496 if (sqrfFactors.getFirst().factor().inCoeffDomain()) 497 sqrfFactors.removeFirst(); 498 499 Variable X; 500 for (iter= sqrfFactors; iter.hasItem(); iter++) 501 { 502 if (hasFirstAlgVar (iter.getItem().factor(), X)) 503 { 504 // factorize over alg.extension with X 505 tmp= factorize (iter.getItem().factor(), X); 506 } 492 CFGenerator * Gen; 493 if (getCharacteristic() == 0) 494 Gen= new IntGenerator(); 495 else if (degree (vminpoly) > 0) 496 Gen= AlgExtGenerator (vminpoly).clone(); 497 else 498 Gen= new FFGenerator(); 499 500 CFFList LL= CFFList (CFFactor (f, 1)); 501 502 Variable X; 503 do 504 { 505 tmp= CFFList(); 506 for (iter= LL; iter.hasItem(); iter++) 507 { 508 f= iter.getItem().factor(); 509 sqrfFactors= sqrf_norm_sub (f, Rstar, *Gen, s, g, R, false); 510 511 if (hasFirstAlgVar (R, X)) 512 Factorlist= factorize (R, X); 507 513 else 508 { 509 // factorize over k 510 tmp= factorize (iter.getItem().factor(), true); 511 } 512 if (tmp.getFirst().factor().inCoeffDomain()) 513 tmp.removeFirst(); 514 for (iter2= tmp; iter2.hasItem(); iter2++) 515 Factorlist= append (Factorlist, iter2.getItem()); 516 } 517 } 518 else 519 Factorlist= factorize (R, true); 520 521 if (!Factorlist.getFirst().factor().inCoeffDomain()) 522 Factorlist.insert (CFFactor (1, 1)); 523 if (Factorlist.length() == 2 && Factorlist.getLast().exp() == 1) 524 { 525 f= backSubst (f, backSubsts, Astar); 526 f *= bCommonDen (f); 527 f= Prem (f, as); 528 f /= vcontent (f, as.getFirst().mvar()); 529 530 L.append(CFFactor(f,1)); 531 } 532 else 533 { 534 g= f; 535 for (iter= Factorlist; iter.hasItem(); iter++) 536 { 537 CanonicalForm fnew= iter.getItem().factor(); 538 if (fnew.level() < Rstar.level()) //factor is a constant from the function field 539 continue; 514 Factorlist= factorize (R); 515 516 if (!Factorlist.getFirst().factor().inCoeffDomain()) 517 Factorlist.insert (CFFactor (1, 1)); 518 if (Factorlist.length() == 2 && Factorlist.getLast().exp() == 1) 519 { 520 f= backSubst (f, backSubsts, Astar); 521 f *= bCommonDen (f); 522 f= Prem (f, as); 523 f /= vcontent (f, as.getFirst().mvar()); 524 525 L.append (CFFactor (f, 1)); 526 break; 527 } 540 528 else 541 529 { 542 fnew= fnew (g.mvar() + s*Rstar.mvar(), g.mvar()); 543 fnew= reduce (fnew, Rstar); 544 } 545 546 h= alg_gcd (g, fnew, Rstarlist); 547 numinv= QuasiInverse (Rstar, alg_LC (h, algExtLevel), Rstar.mvar()); 548 h *= numinv; 549 h= Prem (h, Rstarlist); 550 h /= vcontent (h, Rstar.mvar()); 551 552 if (h.level() >= Rstar.level()) 553 { 554 g= divide (g, h, Rstarlist); 555 h= backSubst (h, backSubsts, Astar); 556 h= Prem (h, as); 557 h *= bCommonDen (h); 558 h /= vcontent (h, as.getFirst().mvar()); 559 L.append (CFFactor (h, 1)); 560 } 561 } 562 // we are not interested in a 563 // constant (over K_r, which can be a polynomial!) 564 if (degree (g, f.mvar()) > 0) 565 L.append (CFFactor (g, 1)); 566 } 567 CFFList LL; 568 if (getCharacteristic() > 0) //do I really need this part? 569 { 570 CFFListIterator i=L; 571 CanonicalForm c_fac=1; 572 CanonicalForm c; 573 for(;i.hasItem(); i++ ) 574 { 575 CanonicalForm ff=i.getItem().factor(); 576 c=alg_lc(ff); 577 int e=i.getItem().exp(); 578 ff/=c; 579 if (!ff.isOne()) LL.append(CFFactor(ff,e)); 580 while (e>0) { c_fac*=c;e--; } 581 } 582 if (!c_fac.isOne()) LL.insert(CFFactor(c_fac,1)); 583 } 584 else 585 { 586 LL=L; 587 } 530 g= f; 531 for (iter2= Factorlist; iter2.hasItem(); iter2++) 532 { 533 CanonicalForm fnew= iter2.getItem().factor(); 534 if (fnew.level() < Rstar.level()) //factor is a constant from the function field 535 continue; 536 else 537 { 538 fnew= fnew (g.mvar() + s*Rstar.mvar(), g.mvar()); 539 fnew= reduce (fnew, Rstar); 540 } 541 542 h= alg_gcd (g, fnew, Rstarlist); 543 numinv= QuasiInverse (Rstar, alg_LC (h, algExtLevel), Rstar.mvar()); 544 h *= numinv; 545 h= Prem (h, Rstarlist); 546 h /= vcontent (h, Rstar.mvar()); 547 548 if (h.level() >= Rstar.level()) 549 { 550 g= divide (g, h, Rstarlist); 551 if (degree (h) == 1 || iter2.getItem().exp() == 1) 552 { 553 h= backSubst (h, backSubsts, Astar); 554 h= Prem (h, as); 555 h *= bCommonDen (h); 556 h /= vcontent (h, as.getFirst().mvar()); 557 L.append (CFFactor (h, 1)); 558 } 559 else 560 tmp.append (CFFactor (h, iter2.getItem().exp())); 561 } 562 } 563 } 564 } 565 LL= tmp; 566 (*Gen).next(); 567 } 568 while (!LL.isEmpty()); 588 569 589 570 if (!isRat && getCharacteristic() == 0) 590 571 Off (SW_RATIONAL); 591 572 592 return LL; 573 delete Gen; 574 575 return L; 593 576 } 594 577
Note: See TracChangeset
for help on using the changeset viewer.