Changeset 78f221 in git


Ignore:
Timestamp:
Apr 11, 2000, 4:09:39 PM (24 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
3bc0f16ac223887f4e8bb9ba4e3072b558f9ffa1
Parents:
9f609e6ca07c0e3f63333b218d600891d22bdd06
Message:
*hannes: gcd's updated


git-svn-id: file:///usr/local/Singular/svn/trunk@4258 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/clapsing.cc

    r9f609e6 r78f221  
    33*  Computer Algebra System SINGULAR     *
    44****************************************/
    5 // $Id: clapsing.cc,v 1.61 2000-04-04 12:48:33 Singular Exp $
     5// $Id: clapsing.cc,v 1.62 2000-04-11 14:09:39 Singular Exp $
    66/*
    77* ABSTRACT: interface between Singular and factory
     
    490490void singclap_divide_content ( poly f )
    491491{
    492   if ( nGetChar() == 1 )
    493     setCharacteristic( 0 );
    494   else  if ( nGetChar() == -1 )
    495     return; /* not implemented for R */
    496   else  if ( nGetChar() < 0 )
    497     setCharacteristic( -nGetChar() );
    498   else if (currRing->parameter==NULL) /* not GF(q) */
    499     setCharacteristic( nGetChar() );
    500   else
    501     return; /* not implemented*/
    502492  if ( f==NULL )
    503493  {
     
    509499    return;
    510500  }
     501
     502  if (rField_is_Zp_a())
     503  {
     504    setCharacteristic( -nGetChar() );
     505  }
     506  else if (rField_is_Q_a())
     507  {
     508    setCharacteristic( 0 );
     509  }
    511510  else
    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);
     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    }
    521548    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       }
    548       pIter(p);
    549     }
    550     FACTORY_ALGOUT( "G", ((lnumber)g1)->z );
    551     g = convSingTrClapP( ((lnumber)g1)->z );
    552     g = gcd( g, convSingTrClapP( ((lnumber)g2)->z ));
    553 
    554     // second run: gcd's
    555 
    556     p = f;
    557     TIMING_START( contentTimer );
    558     while ( (p != NULL) && (g != 1)  && ( g != 0))
    559     {
    560       FACTORY_ALGOUT( "h", (((lnumber)pGetCoeff(p))->z) );
    561       h = convSingTrClapP( ((lnumber)pGetCoeff(p))->z );
    562       pIter( p );
    563 #ifdef FACTORY_GCD_STAT
    564       // save g
    565       CanonicalForm gOld = g;
    566 #endif
    567 
    568 #ifdef FACTORY_GCD_TEST
    569       g = CFPrimitiveGcdUtil::gcd( g, h );
    570 #else
    571       g = gcd( g, h );
    572 #endif
    573 
    574       FACTORY_GCDSTAT( "gcnt:", gOld, h, g );
    575       FACTORY_CFTROUT( "g", g );
    576       L.append( h );
    577     }
    578     TIMING_END( contentTimer );
    579     FACTORY_CONTSTAT( "cont:", g );
     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 );
    580566    if (( g == 1 ) || (g == 0))
    581567    {
    582568      pTest(f);
     569      #ifdef LDEBUG
     570      PrintS("=> gcd 0 in divide_content\n");
     571      #endif
    583572      return;
    584573    }
    585     #ifdef LDEBUG
    586     else if ( g == 0 )
    587     {
    588       pTest(f);
    589       pWrite(f);
    590       PrintS("=> gcd 0 in divide_content\n");
    591       return;
    592     }
    593     #endif
    594574    else
    595575    {
     
    12911271void singclap_algdividecontent ( alg f, alg g, alg &ff, alg &gg )
    12921272{
     1273 On(SW_USE_SPARSEMOD);
    12931274 FACTORY_ALGOUT( "f", f );
    12941275 FACTORY_ALGOUT( "g", g );
     
    13101291   GCD=CFPrimitiveGcdUtil::gcd( F, G );
    13111292#else
    1312    GCD=gcd( F, G );
     1293   GCD=gcd ( F, G );
    13131294#endif
    13141295   TIMING_END( algContentTimer );
     
    13171298   FACTORY_GCDSTAT( "acnt:", F, G, GCD );
    13181299
    1319    if (GCD!=1)
     1300   if ((GCD!=1) && (GCD != 0))
    13201301   {
    13211302     ff= convClapASingA( F/ GCD );
     
    13391320   FACTORY_GCDSTAT( "acnt:", F, G, GCD );
    13401321
    1341    if (GCD!=1)
     1322   if ((GCD!=1) && (GCD != 0))
    13421323   {
    13431324     ff= convClapPSingTr( F/ GCD );
Note: See TracChangeset for help on using the changeset viewer.