Changeset a2c07bb in git for libpolys


Ignore:
Timestamp:
Jun 17, 2022, 6:56:53 PM (23 months ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
8d8c973f1674602e68bdfd36d9a67586050f47bdce7435b23b44b6987cf9629684c88b0d33c063fd
Parents:
148c3f7df007ca33811e5be36a569846dac3703a
Message:
opt: id_DelDiv
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libpolys/polys/simpleideals.cc

    r148c3f7 ra2c07bb  
    349349}
    350350
     351/// delete id[j], if LT(j) == coeff*mon*LT(i) (j>i)
     352static void id_DelDiv_SEV(ideal id, int k,const ring r)
     353{
     354  int kk = k;
     355  long *sev=(long*)omAlloc0((k+1)*sizeof(long));
     356  for (int i=0; i<=k; i++)
     357  {
     358    if(id->m[i]!=NULL)
     359      sev[i]=p_GetShortExpVector(id->m[i],r);
     360  }
     361  for (int i=0; i<k; i++)
     362  {
     363    if (id->m[i] != NULL)
     364    {
     365      poly m_i=id->m[i];
     366      for (int j=i+1; j<=k; j++)
     367      {
     368        if (id->m[j]!=NULL)
     369        {
     370          if (p_LmShortDivisibleBy(m_i, sev[i],r, id->m[j],~sev[j],r))
     371          {
     372            p_Delete(&id->m[j],r);
     373          }
     374          else if (p_LmShortDivisibleBy(id->m[j],sev[j],r, m_i,~sev[i],r))
     375          {
     376            p_Delete(&id->m[i],r);
     377            break;
     378          }
     379        }
     380      }
     381    }
     382  }
     383  omFreeSize(sev,(kk+1)*sizeof(long));
     384}
     385
    351386/// delete id[j], if LT(j) == coeff*mon*LT(i) and vice versa, i.e.,
    352387/// delete id[i], if LT(i) == coeff*mon*LT(j)
     
    386421  {
    387422    /* the case of a coefficient field: */
     423    if (k>10)
     424    {
     425      id_DelDiv_SEV(id,k,r);
     426      return;
     427    }
    388428    for (i=k-1; i>=0; i--)
    389429    {
     
    413453void id_DelDiv_Sorted(ideal id, const ring r)
    414454{
    415   id_Test(id, r);
    416 
    417455  int k = IDELEMS(id)-1;
    418   for (int i=0; i<k; i++)
    419   {
    420     if (id->m[i] != NULL)
    421     {
    422       poly m_i=id->m[i];
    423       for (int j=i+1; j<=k; j++)
    424       {
    425         if (id->m[j]!=NULL)
    426         {
    427           if (p_LmDivisibleByNoComp(m_i, id->m[j],r))
    428           {
    429             p_Delete(&id->m[j],r);
    430           }
    431           else if (p_LmDivisibleByNoComp(id->m[j], m_i,r))
    432           {
    433             p_Delete(&id->m[i],r);
    434             break;
    435           }
    436         }
    437       }
    438     }
    439   }
     456  id_DelDiv_SEV(id,k,r);
    440457}
    441458
Note: See TracChangeset for help on using the changeset viewer.