Changeset 7b4ca1f in git


Ignore:
Timestamp:
Jan 30, 2017, 7:18:36 PM (7 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
347543e34be451b4f7f8394141a8c49ecfc42c17ab9451896d9e00fb71ed53755c19641f7eb4b68e
Parents:
ee8cdb02450fdfa9053b378628d72181b97f0d85
Message:
p_GcdMon and p_Div_mm in singclap_gcd_and_divide
Location:
libpolys/polys
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libpolys/polys/clapsing.cc

    ree8cdb r7b4ca1f  
    119119    return res;
    120120  }
    121   if (p_IsConstant(g, r))
    122   {
    123     coeffs cf=r->cf;
    124     number G=pGetCoeff(g);
    125     G=n_Copy(G,cf);
    126     if(n_IsOne(G,cf)) return p_NSet(G,r);;
    127     poly ff=f;
    128     do
    129     {
    130       number n=n_SubringGcd(G,pGetCoeff(ff),cf);
    131       n_Delete(&G,cf);
    132       G=n;
    133       if (n_IsOne(G,cf)) break;
    134       pIter(ff);
    135     } while(ff!=NULL);
    136     if(n_IsOne(G,cf)) return p_NSet(G,r);
    137     f=p_Div_nn(f,G,r); p_Normalize(f,r);
    138     g=p_Div_nn(g,G,r); p_Normalize(g,r);
    139     return p_NSet(G,r);
    140   }
    141   else if (p_IsConstant(f, r))
    142   {
    143     coeffs cf=r->cf;
    144     number G=pGetCoeff(f);
    145     G=n_Copy(G,cf);
    146     if(n_IsOne(G,cf)) return p_NSet(G,r);;
    147     poly ff=g;
    148     do
    149     {
    150       number n=n_SubringGcd(G,pGetCoeff(ff),cf);
    151       n_Delete(&G,cf);
    152       G=n;
    153       if (n_IsOne(G,cf)) break;
    154       pIter(ff);
    155     } while(ff!=NULL);
    156     if(n_IsOne(G,cf)) return p_NSet(G,r);
    157     f=p_Div_nn(f,G,r);
    158     g=p_Div_nn(g,G,r);
    159     return p_NSet(G,r);
     121  if (pNext(g)==NULL)
     122  {
     123    poly G=p_GcdMon(g,f,r);
     124    if (!n_IsOne(pGetCoeff(G),r->cf)
     125    || (!p_IsConstant(G,r)))
     126    {
     127      f=p_Div_mm(f,G,r);
     128      g=p_Div_mm(g,G,r);
     129    }
     130    return G;
     131  }
     132  else if (pNext(f)==NULL)
     133  {
     134    poly G=p_GcdMon(f,g,r);
     135    if (!n_IsOne(pGetCoeff(G),r->cf)
     136    || (!p_IsConstant(G,r)))
     137    {
     138      f=p_Div_mm(f,G,r);
     139      g=p_Div_mm(g,G,r);
     140    }
     141    return G;
    160142  }
    161143
  • libpolys/polys/monomials/p_polys.cc

    ree8cdb r7b4ca1f  
    14851485      p_SetCoeff(p,nc,r);
    14861486      prev=p;
     1487      pIter(p);
     1488    }
     1489    else
     1490    {
     1491      if (prev==NULL)
     1492      {
     1493        p_LmDelete(&result,r);
     1494        p=result;
     1495      }
     1496      else
     1497      {
     1498        p_LmDelete(&pNext(prev),r);
     1499        p=pNext(prev);
     1500      }
     1501    }
     1502  }
     1503  p_Test(result,r);
     1504  return(result);
     1505}
     1506
     1507poly p_Div_mm(poly p, const poly m, const ring r)
     1508{
     1509  p_Test(p, r);
     1510  p_Test(m, r);
     1511  poly result = p;
     1512  poly prev = NULL;
     1513  number n=pGetCoeff(m);
     1514  while (p!=NULL)
     1515  {
     1516    number nc = n_Div(pGetCoeff(p),n,r->cf);
     1517    n_Normalize(nc,r->cf);
     1518    if (!n_IsZero(nc,r->cf))
     1519    {
     1520      p_SetCoeff(p,nc,r);
     1521      prev=p;
     1522      p_ExpVectorSub(p,m,r);
    14871523      pIter(p);
    14881524    }
     
    47634799  {
    47644800    if (h==NULL) break;
    4765     one_coeff=TRUE;
    47664801    if(!one_coeff)
    47674802    {
  • libpolys/polys/monomials/p_polys.h

    ree8cdb r7b4ca1f  
    20272027/// polynomial gcd for f=mon
    20282028poly p_GcdMon(poly f, poly g, const ring r);
     2029
     2030/// divide polynomial by monomial
     2031poly p_Div_mm(poly p, const poly m, const ring r);
    20292032#endif // P_POLYS_H
    20302033
Note: See TracChangeset for help on using the changeset viewer.