Changeset 3bc0f16 in git
- Timestamp:
- Apr 11, 2000, 4:48:25 PM (24 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- fe06960a5d598951cf3fc52947688afb04933d17
- Parents:
- 78f2216c4ff0ad23f68b4cdfcdbeabbd8107d8f3
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/clapsing.cc
r78f221 r3bc0f16 3 3 * Computer Algebra System SINGULAR * 4 4 ****************************************/ 5 // $Id: clapsing.cc,v 1.6 2 2000-04-11 14:09:39Singular Exp $5 // $Id: clapsing.cc,v 1.63 2000-04-11 14:48:25 Singular Exp $ 6 6 /* 7 7 * ABSTRACT: interface between Singular and factory … … 499 499 return; 500 500 } 501 502 if (rField_is_Zp_a())503 {504 setCharacteristic( -nGetChar() );505 }506 else if (rField_is_Q_a())507 {508 setCharacteristic( 0 );509 }510 501 else 511 return; /* not implemented R, long R, long C, GF, Z/p */ 512 513 CFList L; 514 CanonicalForm g, h; 515 poly p = pNext(f); 516 517 // first attemp: find 2 smallest g: 518 519 number g1=pGetCoeff(f); 520 number g2=pGetCoeff(p); // p==pNext(f); 521 pIter(p); 522 int sz1=nSize(g1); 523 int sz2=nSize(g2); 524 if (sz1>sz2) 525 { 526 number gg=g1; 527 g1=g2; g2=gg; 528 int sz=sz1; 529 sz1=sz2; sz2=sz; 530 } 531 while (p!=NULL) 532 { 533 int n_sz=nSize(pGetCoeff(p)); 534 if (n_sz<sz1) 535 { 536 sz2=sz1; 537 g2=g1; 538 g1=pGetCoeff(p); 539 sz1=n_sz; 540 if (sz1<=3) break; 541 } 542 else if(n_sz<sz2) 543 { 544 sz2=n_sz; 545 g2=pGetCoeff(p); 546 sz2=n_sz; 547 } 502 { 503 if ( nGetChar() == 1 ) 504 setCharacteristic( 0 ); 505 else if ( nGetChar() == -1 ) 506 return; /* not implemented for R */ 507 else if ( nGetChar() < 0 ) 508 setCharacteristic( -nGetChar() ); 509 else if (currRing->parameter==NULL) /* not GF(q) */ 510 setCharacteristic( nGetChar() ); 511 else 512 return; /* not implemented*/ 513 514 CFList L; 515 CanonicalForm g, h; 516 poly p = pNext(f); 517 518 // first attemp: find 2 smallest g: 519 520 number g1=pGetCoeff(f); 521 number g2=pGetCoeff(p); // p==pNext(f); 548 522 pIter(p); 549 } 550 if (sz1 > 4) return; // do only a simple gcd 551 FACTORY_ALGOUT( "G", ((lnumber)g1)->z ); 552 g = convSingTrClapP( ((lnumber)g1)->z ); 553 g = gcd( g, convSingTrClapP( ((lnumber)g2)->z )); 554 555 // second run: gcd's 556 557 p = f; 558 TIMING_START( contentTimer ); 559 while ( (p != NULL) && (g != 1) && ( g != 0)) 560 { 561 FACTORY_ALGOUT( "h", (((lnumber)pGetCoeff(p))->z) ); 562 h = convSingTrClapP( ((lnumber)pGetCoeff(p))->z ); 563 pIter( p ); 564 g = gcd( g, h ); 565 L.append( h ); 523 int sz1=nSize(g1); 524 int sz2=nSize(g2); 525 if (sz1>sz2) 526 { 527 number gg=g1; 528 g1=g2; g2=gg; 529 int sz=sz1; 530 sz1=sz2; sz2=sz; 531 } 532 while (p!=NULL) 533 { 534 int n_sz=nSize(pGetCoeff(p)); 535 if (n_sz<sz1) 536 { 537 sz2=sz1; 538 g2=g1; 539 g1=pGetCoeff(p); 540 sz1=n_sz; 541 if (sz1<=3) break; 542 } 543 else if(n_sz<sz2) 544 { 545 sz2=n_sz; 546 g2=pGetCoeff(p); 547 sz2=n_sz; 548 } 549 pIter(p); 550 } 551 FACTORY_ALGOUT( "G", ((lnumber)g1)->z ); 552 g = convSingTrClapP( ((lnumber)g1)->z ); 553 g = gcd( g, convSingTrClapP( ((lnumber)g2)->z )); 554 555 // second run: gcd's 556 557 p = f; 558 TIMING_START( contentTimer ); 559 while ( (p != NULL) && (g != 1) && ( g != 0)) 560 { 561 FACTORY_ALGOUT( "h", (((lnumber)pGetCoeff(p))->z) ); 562 h = convSingTrClapP( ((lnumber)pGetCoeff(p))->z ); 563 pIter( p ); 564 #ifdef FACTORY_GCD_STAT 565 // save g 566 CanonicalForm gOld = g; 567 #endif 568 569 #ifdef FACTORY_GCD_TEST 570 g = CFPrimitiveGcdUtil::gcd( g, h ); 571 #else 572 g = gcd( g, h ); 573 #endif 574 575 FACTORY_GCDSTAT( "gcnt:", gOld, h, g ); 576 FACTORY_CFTROUT( "g", g ); 577 L.append( h ); 578 } 579 TIMING_END( contentTimer ); 580 FACTORY_CONTSTAT( "cont:", g ); 566 581 if (( g == 1 ) || (g == 0)) 567 582 { 568 583 pTest(f); 569 #ifdef LDEBUG570 PrintS("=> gcd 0 in divide_content\n");571 #endif572 584 return; 573 585 } … … 1271 1283 void singclap_algdividecontent ( alg f, alg g, alg &ff, alg &gg ) 1272 1284 { 1273 On(SW_USE_SPARSEMOD);1274 1285 FACTORY_ALGOUT( "f", f ); 1275 1286 FACTORY_ALGOUT( "g", g ); … … 1291 1302 GCD=CFPrimitiveGcdUtil::gcd( F, G ); 1292 1303 #else 1293 GCD=gcd 1304 GCD=gcd( F, G ); 1294 1305 #endif 1295 1306 TIMING_END( algContentTimer ); … … 1298 1309 FACTORY_GCDSTAT( "acnt:", F, G, GCD ); 1299 1310 1300 if ((GCD!=1) && (GCD !=0))1311 if ((GCD!=1) && (GCD=!0)) 1301 1312 { 1302 1313 ff= convClapASingA( F/ GCD ); … … 1320 1331 FACTORY_GCDSTAT( "acnt:", F, G, GCD ); 1321 1332 1322 if ((GCD!=1) && (GCD !=0))1333 if ((GCD!=1) && (GCD!=0)) 1323 1334 { 1324 1335 ff= convClapPSingTr( F/ GCD );
Note: See TracChangeset
for help on using the changeset viewer.