Changeset b17fa5 in git for factory/facAlgFuncUtil.cc
- Timestamp:
- May 9, 2014, 10:54:58 AM (10 years ago)
- Branches:
- (u'spielwiese', '2a584933abf2a2d3082034c7586d38bb6de1a30a')
- Children:
- abde36b449ab6a0f2a38cfd641d669db6be6a1b9
- Parents:
- 5a06b22d913c4ebbbafbc22723d9ebfed2f0c830
- git-author:
- Martin Lee <martinlee84@web.de>2014-05-09 10:54:58+02:00
- git-committer:
- Martin Lee <martinlee84@web.de>2014-05-12 14:35:03+02:00
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
factory/facAlgFuncUtil.cc
r5a06b22 rb17fa5 320 320 G= q; 321 321 } 322 iter.getItem()= CFFactor (iter.getItem().factor(), iter.getItem().exp()+count); 322 iter.getItem()= CFFactor (iter.getItem().factor(), 323 iter.getItem().exp() + count); 323 324 } 324 325 } … … 435 436 436 437 CanonicalForm 437 Sprem ( const CanonicalForm &f, const CanonicalForm &g, CanonicalForm & m, CanonicalForm & q ) 438 Sprem (const CanonicalForm &f, const CanonicalForm &g, CanonicalForm & m, 439 CanonicalForm & q ) 438 440 { 439 441 CanonicalForm ff, gg, l, test, retvalue; … … 442 444 Variable vf, vg, v; 443 445 444 if ( (vf = f.mvar()) < (vg = g.mvar()) ) 445 { 446 m=CanonicalForm(0); q=CanonicalForm(0); 446 if ((vf = f.mvar()) < (vg = g.mvar())) 447 { 448 m= 0; 449 q= 0; 447 450 return f; 448 451 } … … 451 454 if ( vf == vg ) 452 455 { 453 ff = f; gg = g; 454 reord = false; 455 v = vg; // == x 456 } 457 else 458 { 459 v = Variable(level(f.mvar()) + 1); 460 ff = swapvar(f,vg,v); // == r 461 gg = swapvar(g,vg,v); // == v 456 ff= f; 457 gg= g; 458 reord= false; 459 v= vg; // == x 460 } 461 else 462 { 463 v= Variable (f.level() + 1); 464 ff= swapvar (f, vg, v); // == r 465 gg= swapvar (g, vg, v); // == v 462 466 reord=true; 463 467 } 464 dg = degree( gg, v ); // == dv 465 df = degree( ff, v ); // == dr 466 if (dg <= df) {l=LC(gg); gg = gg -LC(gg)*power(v,dg);} 467 else { l = 1; } 468 dg= degree (gg, v); // == dv 469 df= degree (ff, v); // == dr 470 if (dg <= df) 471 { 472 l= LC (gg); 473 gg= gg - LC(gg)*power(v,dg); 474 } 475 else 476 l = 1; 468 477 n= 0; 469 while ( ( dg <= df ) && ( !ff.isZero()) ) 470 { 471 test= power(v,df-dg) * gg * LC(ff); 472 if ( df == 0 ){ff= ff.genZero();} 473 else {ff= ff - LC(ff)*power(v,df);} 474 ff = l*ff-test; 475 df= degree(ff,v); 478 while ((dg <= df) && (!ff.isZero())) 479 { 480 test= gg*LC (ff)*power (v, df - dg); 481 if (df == 0) 482 ff= 0; 483 else 484 ff= ff - LC(ff)*power(v,df); 485 ff= l*ff - test; 486 df= degree (ff, v); 476 487 n++; 477 488 } 478 if ( reord ) 479 { 480 retvalue= swapvar( ff, vg, v ); 481 } 482 else 483 { 489 490 if (reord) 491 retvalue= swapvar (ff, vg, v); 492 else 484 493 retvalue= ff; 485 } 486 m= power (l,n);487 if ( fdivides(g,m*f-retvalue))488 q= (m*f -retvalue)/g;489 else 490 q= CanonicalForm(0);494 495 m= power (l, n); 496 if (fdivides (g, m*f - retvalue)) 497 q= (m*f - retvalue)/g; 498 else 499 q= 0; 491 500 return retvalue; 492 501 } … … 542 551 int charac= getCharacteristic(); 543 552 setCharacteristic(0); // need it for k ! 544 int k= 1, m=1, length=degreelist.length();553 int k= 1, m= 1, length= degreelist.length(); 545 554 IntListIterator i; 546 555 547 for (i=degreelist; i.hasItem(); i++) m= m*i.getItem(); 548 int q=charac; 549 while (q <= ((n*m)*(n*m)/2)) { k= k+1; q= q*charac;} 550 int l=0; 551 do { 552 for (i=degreelist; i.hasItem(); i++){ 553 l= l+1; 554 if ( igcd(k,i.getItem()) == 1){ 555 if ( l==length ){ setCharacteristic(charac); return k; } 556 for (i= degreelist; i.hasItem(); i++) 557 m= m*i.getItem(); 558 int q= charac; 559 while (q <= ((n*m)*(n*m)/2)) 560 { 561 k= k+1; 562 q= q*charac; 563 } 564 int l= 0; 565 do 566 { 567 for (i= degreelist; i.hasItem(); i++) 568 { 569 l= l + 1; 570 if (igcd (k, i.getItem()) == 1) 571 { 572 if (l == length) 573 { 574 setCharacteristic (charac); 575 return k; 576 } 556 577 } 557 else { break; } 558 } 559 k= k+1; l=0; 560 } 561 while ( 1 ); 578 else 579 break; 580 } 581 k= k + 1; 582 l= 0; 583 } 584 while (1); 562 585 } 563 586 … … 587 610 while (degree (pi1,x) > 0) 588 611 { 589 psqr (pi, pi1, q, pi2, m, x);612 psqr (pi, pi1, q, pi2, m, x); 590 613 pi2 /= bi; 591 614 … … 594 617 t0= tmp; 595 618 t1 /= bi; 596 pi = pi1; pi1 = pi2; 597 if ( degree ( pi1, x ) > 0 ) 598 { 599 delta = degree( pi, x ) - degree( pi1, x ); 600 if ( (delta+1) % 2 ) 601 bi = LC( pi, x ) * power( Hi, delta ); 619 pi= pi1; 620 pi1= pi2; 621 if (degree (pi1, x) > 0) 622 { 623 delta= degree (pi, x) - degree (pi1, x); 624 if ((delta + 1) % 2) 625 bi= LC (pi, x)*power (Hi, delta); 602 626 else 603 bi = -LC( pi, x ) * power( Hi, delta);604 Hi = power( LC( pi1, x ), delta ) / power( Hi, delta-1);627 bi= -LC (pi, x)*power (Hi, delta); 628 Hi= power (LC (pi1, x), delta)/power (Hi, delta - 1); 605 629 } 606 630 }
Note: See TracChangeset
for help on using the changeset viewer.