Changeset 9b4920b in git for factory


Ignore:
Timestamp:
Jan 10, 2013, 10:42:29 AM (11 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
4505ca15be27a1d26c6a46880debf164fc3d31b0
Parents:
58c0e4759150dd2e6e37fe30ba3369048248e78c
git-author:
Martin Lee <martinlee84@web.de>2013-01-10 10:42:29+01:00
git-committer:
Martin Lee <martinlee84@web.de>2013-02-18 15:00:57+01:00
Message:
chg: extracted LC heuristic

Conflicts:

	factory/facFqFactorize.h
Location:
factory
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • factory/facFactorize.cc

    r58c0e4 r9b4920b  
    675675          if (!foundMultiplier && fdivides (getVars (LCmultiplier), testVars))
    676676          {
    677             Variable xx;
    678             CFList vars1;
    679             CFFList sqrfMultiplier= sqrFree (LCmultiplier);
    680             if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
    681               sqrfMultiplier.removeFirst();
    682             sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier);
    683             xx= Variable (2);
    684             for (iter= oldBiFactors; iter.hasItem(); iter++)
    685               vars1.append (power (xx, degree (LC (iter.getItem(),1), xx)));
    686             for (int i= 0; i < lengthAeval2; i++)
    687             {
    688               if (oldAeval[i].isEmpty())
    689                 continue;
    690               xx= oldAeval[i].getFirst().mvar();
    691               iter2= vars1;
    692               for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++)
    693                 iter2.getItem() *= power(xx,degree (LC (iter.getItem(),1), xx));
    694             }
    695             CanonicalForm tmp;
    696             iter2= vars1;
    697             for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++,
    698                                                                     iter2++)
    699             {
    700               tmp= iter.getItem()/LCmultiplier;
    701               for (int i=1; i <= tmp.level(); i++)
    702               {
    703                 if (degree(tmp,i) > 0 &&
    704                     (degree(iter2.getItem(),i) > degree (tmp,i)))
    705                   iter2.getItem() /= power (Variable (i), degree (tmp,i));
    706               }
    707             }
    708             int multi;
    709             for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++)
    710             {
    711               multi= 0;
    712               for (iter= vars1; iter.hasItem(); iter++)
    713               {
    714                 tmp= iter.getItem();
    715                 while (fdivides (myGetVars (ii.getItem().factor()), tmp))
    716                 {
    717                   multi++;
    718                   tmp /= myGetVars (ii.getItem().factor());
    719                 }
    720               }
    721               if (multi == ii.getItem().exp())
    722               {
    723                 index= 1;
    724                 for (iter= vars1; iter.hasItem(); iter++, index++)
    725                 {
    726                   while (fdivides (myGetVars(ii.getItem().factor()),
    727                                    iter.getItem()
    728                                   )
    729                         )
    730                   {
    731                     int index2= 1;
    732                     for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();
    733                          iter2++, index2++)
    734                     {
    735                       if (index2 == index)
    736                         continue;
    737                       else
    738                       {
    739                         tmp= ii.getItem().factor();
    740                         iter2.getItem() /= tmp;
    741                         CFListIterator iter3= evaluation;
    742                         for (int jj= A.level(); jj > 2; jj--, iter3++)
    743                           tmp= tmp (iter3.getItem(), jj);
    744                         if (!tmp.inCoeffDomain())
    745                         {
    746                           int index3= 1;
    747                           for (iter3= biFactors; iter3.hasItem(); iter3++,
    748                                                                   index3++)
    749                           {
    750                             if (index3 == index2)
    751                             {
    752                               iter3.getItem() /= tmp;
    753                               iter3.getItem() /= Lc (iter3.getItem());
    754                               break;
    755                             }
    756                           }
    757                         }
    758                         A /= ii.getItem().factor();
    759                       }
    760                     }
    761                     iter.getItem() /= getVars (ii.getItem().factor());
    762                   }
    763                 }
    764               }
    765               else
    766               {
    767                 index= 1;
    768                 for (iter= vars1; iter.hasItem(); iter++, index++)
    769                 {
    770                   if (!fdivides (myGetVars (ii.getItem().factor()),
    771                                  iter.getItem()
    772                                 )
    773                      )
    774                   {
    775                     int index2= 1;
    776                     for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();
    777                          iter2++, index2++)
    778                     {
    779                       if (index2 == index)
    780                       {
    781                         tmp= power (ii.getItem().factor(), ii.getItem().exp());
    782                         iter2.getItem() /= tmp;
    783                         A /= tmp;
    784                         CFListIterator iter3= evaluation;
    785                         for (int jj= A.level(); jj > 2; jj--, iter3++)
    786                           tmp= tmp (iter3.getItem(), jj);
    787                         if (!tmp.inCoeffDomain())
    788                         {
    789                           int index3= 1;
    790                           for (iter3= biFactors; iter3.hasItem(); iter3++,
    791                                                                   index3++)
    792                           {
    793                             if (index3 == index2)
    794                             {
    795                               iter3.getItem() /= tmp;
    796                               iter3.getItem() /= Lc (iter3.getItem());
    797                               break;
    798                             }
    799                           }
    800                         }
    801                       }
    802                     }
    803                   }
    804                 }
    805               }
    806             }
     677            LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval,
     678                         lengthAeval2, evaluation, oldBiFactors);
    807679          }
    808680        }
     
    844716  {
    845717    LCheuristic= true;
    846     int index;
    847     Variable xx;
    848     CFList vars1;
    849     CFFList sqrfMultiplier= sqrFree (LCmultiplier);
    850     if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
    851       sqrfMultiplier.removeFirst();
    852     sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier);
    853     xx= Variable (2);
    854     for (iter= oldBiFactors; iter.hasItem(); iter++)
    855       vars1.append (power (xx, degree (LC (iter.getItem(),1), xx)));
    856     for (int i= 0; i < lengthAeval2; i++)
    857     {
    858       if (oldAeval[i].isEmpty())
    859         continue;
    860       xx= oldAeval[i].getFirst().mvar();
    861       iter2= vars1;
    862       for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++)
    863         iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx));
    864     }
    865     CanonicalForm tmp;
    866     iter2= vars1;
    867     for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, iter2++)
    868     {
    869       tmp= iter.getItem()/LCmultiplier;
    870       for (int i=1; i <= tmp.level(); i++)
    871       {
    872         if (degree(tmp,i) > 0 && (degree(iter2.getItem(),i) > degree (tmp,i)))
    873           iter2.getItem() /= power (Variable (i), degree (tmp,i));
    874       }
    875     }
    876     int multi;
    877     for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++)
    878     {
    879       multi= 0;
    880       for (iter= vars1; iter.hasItem(); iter++)
    881       {
    882         tmp= iter.getItem();
    883         while (fdivides (myGetVars (ii.getItem().factor()), tmp))
    884         {
    885           multi++;
    886           tmp /= myGetVars (ii.getItem().factor());
    887         }
    888       }
    889       if (multi == ii.getItem().exp())
    890       {
    891         index= 1;
    892         for (iter= vars1; iter.hasItem(); iter++, index++)
    893         {
    894           while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
    895           {
    896             int index2= 1;
    897             for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++,
    898                                                                       index2++)
    899             {
    900               if (index2 == index)
    901                 continue;
    902               else
    903               {
    904                 tmp= ii.getItem().factor();
    905                 iter2.getItem() /= tmp;
    906                 CFListIterator iter3= evaluation;
    907                 for (int jj= A.level(); jj > 2; jj--, iter3++)
    908                   tmp= tmp (iter3.getItem(), jj);
    909                 if (!tmp.inCoeffDomain())
    910                 {
    911                   int index3= 1;
    912                   for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
    913                   {
    914                     if (index3 == index2)
    915                     {
    916                       iter3.getItem() /= tmp;
    917                       iter3.getItem() /= Lc (iter3.getItem());
    918                       break;
    919                     }
    920                   }
    921                 }
    922                 A /= ii.getItem().factor();
    923               }
    924             }
    925             iter.getItem() /= getVars (ii.getItem().factor());
    926           }
    927         }
    928       }
    929       else
    930       {
    931         index= 1;
    932         for (iter= vars1; iter.hasItem(); iter++, index++)
    933         {
    934           if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
    935           {
    936             int index2= 1;
    937             for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++,
    938                                                                       index2++)
    939             {
    940               if (index2 == index)
    941               {
    942                 tmp= power (ii.getItem().factor(), ii.getItem().exp());
    943                 iter2.getItem() /= tmp;
    944                 A /= tmp;
    945                 CFListIterator iter3= evaluation;
    946                 for (int jj= A.level(); jj > 2; jj--, iter3++)
    947                   tmp= tmp (iter3.getItem(), jj);
    948                 if (!tmp.inCoeffDomain())
    949                 {
    950                   int index3= 1;
    951                   for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
    952                   {
    953                     if (index3 == index2)
    954                     {
    955                       iter3.getItem() /= tmp;
    956                       iter3.getItem() /= Lc (iter3.getItem());
    957                       break;
    958                     }
    959                   }
    960                 }
    961               }
    962             }
    963           }
    964         }
    965       }
    966     }
     718    LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval,
     719                 lengthAeval2, evaluation, oldBiFactors);
    967720
    968721    leadingCoeffs= leadingCoeffs2[lengthAeval2-1];
  • factory/facFqFactorize.cc

    r58c0e4 r9b4920b  
    24052405      i.getItem() *= tmp/LC (i.getItem(), 1);
    24062406      i.getItem() /= Lc (i.getItem());
     2407    }
     2408  }
     2409}
     2410
     2411void
     2412LCHeuristic (CanonicalForm& A, const CanonicalForm& LCmultiplier,
     2413             CFList& biFactors, CFList*& leadingCoeffs, const CFList* oldAeval,
     2414             int lengthAeval, const CFList& evaluation,
     2415             const CFList& oldBiFactors)
     2416{
     2417  CFListIterator iter, iter2;
     2418  int index;
     2419  Variable xx;
     2420  CFList vars1;
     2421  CFFList sqrfMultiplier= sqrFree (LCmultiplier);
     2422  if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
     2423    sqrfMultiplier.removeFirst();
     2424  sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier);
     2425  xx= Variable (2);
     2426  for (iter= oldBiFactors; iter.hasItem(); iter++)
     2427    vars1.append (power (xx, degree (LC (iter.getItem(),1), xx)));
     2428  for (int i= 0; i < lengthAeval; i++)
     2429  {
     2430    if (oldAeval[i].isEmpty())
     2431      continue;
     2432    xx= oldAeval[i].getFirst().mvar();
     2433    iter2= vars1;
     2434    for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++)
     2435      iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx));
     2436  }
     2437  CanonicalForm tmp;
     2438  iter2= vars1;
     2439  for (iter= leadingCoeffs[lengthAeval-1]; iter.hasItem(); iter++, iter2++)
     2440  {
     2441    tmp= iter.getItem()/LCmultiplier;
     2442    for (int i=1; i <= tmp.level(); i++)
     2443    {
     2444      if (degree (tmp,i) > 0 && (degree (iter2.getItem(),i) > degree (tmp,i)))
     2445        iter2.getItem() /= power (Variable (i), degree (tmp,i));
     2446    }
     2447  }
     2448  int multi;
     2449  for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++)
     2450  {
     2451    multi= 0;
     2452    for (iter= vars1; iter.hasItem(); iter++)
     2453    {
     2454      tmp= iter.getItem();
     2455      while (fdivides (myGetVars (ii.getItem().factor()), tmp))
     2456      {
     2457        multi++;
     2458        tmp /= myGetVars (ii.getItem().factor());
     2459      }
     2460    }
     2461    if (multi == ii.getItem().exp())
     2462    {
     2463      index= 1;
     2464      for (iter= vars1; iter.hasItem(); iter++, index++)
     2465      {
     2466        while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
     2467        {
     2468          int index2= 1;
     2469          for (iter2= leadingCoeffs[lengthAeval-1]; iter2.hasItem();iter2++,
     2470                                                                    index2++)
     2471          {
     2472            if (index2 == index)
     2473              continue;
     2474            else
     2475            {
     2476              tmp= ii.getItem().factor();
     2477              iter2.getItem() /= tmp;
     2478              CFListIterator iter3= evaluation;
     2479              for (int jj= A.level(); jj > 2; jj--, iter3++)
     2480                tmp= tmp (iter3.getItem(), jj);
     2481              if (!tmp.inCoeffDomain())
     2482              {
     2483                int index3= 1;
     2484                for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
     2485                {
     2486                  if (index3 == index2)
     2487                  {
     2488                    iter3.getItem() /= tmp;
     2489                    iter3.getItem() /= Lc (iter3.getItem());
     2490                    break;
     2491                  }
     2492                }
     2493              }
     2494              A /= ii.getItem().factor();
     2495            }
     2496          }
     2497          iter.getItem() /= getVars (ii.getItem().factor());
     2498        }
     2499      }
     2500    }
     2501    else
     2502    {
     2503      index= 1;
     2504      for (iter= vars1; iter.hasItem(); iter++, index++)
     2505      {
     2506        if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
     2507        {
     2508          int index2= 1;
     2509          for (iter2= leadingCoeffs[lengthAeval-1];iter2.hasItem();iter2++,
     2510                                                                    index2++)
     2511          {
     2512            if (index2 == index)
     2513            {
     2514              tmp= power (ii.getItem().factor(), ii.getItem().exp());
     2515              iter2.getItem() /= tmp;
     2516              A /= tmp;
     2517              CFListIterator iter3= evaluation;
     2518              for (int jj= A.level(); jj > 2; jj--, iter3++)
     2519                tmp= tmp (iter3.getItem(), jj);
     2520              if (!tmp.inCoeffDomain())
     2521              {
     2522                int index3= 1;
     2523                for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
     2524                {
     2525                  if (index3 == index2)
     2526                  {
     2527                    iter3.getItem() /= tmp;
     2528                    iter3.getItem() /= Lc (iter3.getItem());
     2529                    break;
     2530                  }
     2531                }
     2532              }
     2533            }
     2534          }
     2535        }
     2536      }
    24072537    }
    24082538  }
     
    30493179          if (!foundMultiplier && fdivides (getVars (LCmultiplier), testVars))
    30503180          {
    3051             Variable xx;
    3052             CFList vars1;
    3053             CFFList sqrfMultiplier= sqrFree (LCmultiplier);
    3054             if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
    3055               sqrfMultiplier.removeFirst();
    3056             sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier);
    3057             xx= Variable (2);
    3058             for (iter= oldBiFactors; iter.hasItem(); iter++)
    3059               vars1.append (power (xx, degree (LC (iter.getItem(),1), xx)));
    3060             for (int i= 0; i < lengthAeval2; i++)
    3061             {
    3062               if (oldAeval[i].isEmpty())
    3063                 continue;
    3064               xx= oldAeval[i].getFirst().mvar();
    3065               iter2= vars1;
    3066               for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++)
    3067                 iter2.getItem() *= power(xx,degree (LC (iter.getItem(),1), xx));
    3068             }
    3069             CanonicalForm tmp;
    3070             iter2= vars1;
    3071             for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++,
    3072                                                                     iter2++)
    3073             {
    3074               tmp= iter.getItem()/LCmultiplier;
    3075               for (int i=1; i <= tmp.level(); i++)
    3076               {
    3077                 if (degree(tmp,i) > 0 &&
    3078                     (degree(iter2.getItem(),i) > degree (tmp,i)))
    3079                   iter2.getItem() /= power (Variable (i), degree (tmp,i));
    3080               }
    3081             }
    3082             int multi;
    3083             for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++)
    3084             {
    3085               multi= 0;
    3086               for (iter= vars1; iter.hasItem(); iter++)
    3087               {
    3088                 tmp= iter.getItem();
    3089                 while (fdivides (myGetVars (ii.getItem().factor()), tmp))
    3090                 {
    3091                   multi++;
    3092                   tmp /= myGetVars (ii.getItem().factor());
    3093                 }
    3094               }
    3095               if (multi == ii.getItem().exp())
    3096               {
    3097                 index= 1;
    3098                 for (iter= vars1; iter.hasItem(); iter++, index++)
    3099                 {
    3100                   while (fdivides (myGetVars(ii.getItem().factor()),
    3101                                    iter.getItem()
    3102                                   )
    3103                         )
    3104                   {
    3105                     int index2= 1;
    3106                     for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();
    3107                          iter2++, index2++)
    3108                     {
    3109                       if (index2 == index)
    3110                         continue;
    3111                       else
    3112                       {
    3113                         tmp= ii.getItem().factor();
    3114                         iter2.getItem() /= tmp;
    3115                         CFListIterator iter3= evaluation;
    3116                         for (int jj= A.level(); jj > 2; jj--, iter3++)
    3117                           tmp= tmp (iter3.getItem(), jj);
    3118                         if (!tmp.inCoeffDomain())
    3119                         {
    3120                           int index3= 1;
    3121                           for (iter3= biFactors; iter3.hasItem(); iter3++,
    3122                                                                   index3++)
    3123                           {
    3124                             if (index3 == index2)
    3125                             {
    3126                               iter3.getItem() /= tmp;
    3127                               iter3.getItem() /= Lc (iter3.getItem());
    3128                               break;
    3129                             }
    3130                           }
    3131                         }
    3132                         A /= ii.getItem().factor();
    3133                       }
    3134                     }
    3135                     iter.getItem() /= getVars (ii.getItem().factor());
    3136                   }
    3137                 }
    3138               }
    3139               else
    3140               {
    3141                 index= 1;
    3142                 for (iter= vars1; iter.hasItem(); iter++, index++)
    3143                 {
    3144                   if (!fdivides (myGetVars (ii.getItem().factor()),
    3145                                  iter.getItem()
    3146                                 )
    3147                      )
    3148                   {
    3149                     int index2= 1;
    3150                     for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();
    3151                          iter2++, index2++)
    3152                     {
    3153                       if (index2 == index)
    3154                       {
    3155                         tmp= power (ii.getItem().factor(), ii.getItem().exp());
    3156                         iter2.getItem() /= tmp;
    3157                         A /= tmp;
    3158                         CFListIterator iter3= evaluation;
    3159                         for (int jj= A.level(); jj > 2; jj--, iter3++)
    3160                           tmp= tmp (iter3.getItem(), jj);
    3161                         if (!tmp.inCoeffDomain())
    3162                         {
    3163                           int index3= 1;
    3164                           for (iter3= biFactors; iter3.hasItem(); iter3++,
    3165                                                                   index3++)
    3166                           {
    3167                             if (index3 == index2)
    3168                             {
    3169                               iter3.getItem() /= tmp;
    3170                               iter3.getItem() /= Lc (iter3.getItem());
    3171                               break;
    3172                             }
    3173                           }
    3174                         }
    3175                       }
    3176                     }
    3177                   }
    3178                 }
    3179               }
    3180             }
     3181            LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval,
     3182                         lengthAeval2, evaluation, oldBiFactors);
    31813183          }
    31823184        }
     
    32183220  {
    32193221    LCheuristic= true;
    3220     int index;
    3221     Variable xx;
    3222     CFList vars1;
    3223     CFFList sqrfMultiplier= sqrFree (LCmultiplier);
    3224     if (sqrfMultiplier.getFirst().factor().inCoeffDomain())
    3225       sqrfMultiplier.removeFirst();
    3226     sqrfMultiplier= sortCFFListByNumOfVars (sqrfMultiplier);
    3227     xx= Variable (2);
    3228     for (iter= oldBiFactors; iter.hasItem(); iter++)
    3229       vars1.append (power (xx, degree (LC (iter.getItem(),1), xx)));
    3230     for (int i= 0; i < lengthAeval2; i++)
    3231     {
    3232       if (oldAeval[i].isEmpty())
    3233         continue;
    3234       xx= oldAeval[i].getFirst().mvar();
    3235       iter2= vars1;
    3236       for (iter= oldAeval[i]; iter.hasItem(); iter++, iter2++)
    3237         iter2.getItem() *= power (xx, degree (LC (iter.getItem(),1), xx));
    3238     }
    3239     CanonicalForm tmp;
    3240     iter2= vars1;
    3241     for (iter= leadingCoeffs2[lengthAeval2-1]; iter.hasItem(); iter++, iter2++)
    3242     {
    3243       tmp= iter.getItem()/LCmultiplier;
    3244       for (int i=1; i <= tmp.level(); i++)
    3245       {
    3246         if (degree (tmp,i) > 0 && (degree (iter2.getItem(),i) > degree (tmp,i)))
    3247           iter2.getItem() /= power (Variable (i), degree (tmp,i));
    3248       }
    3249     }
    3250     int multi;
    3251     for (CFFListIterator ii= sqrfMultiplier; ii.hasItem(); ii++)
    3252     {
    3253       multi= 0;
    3254       for (iter= vars1; iter.hasItem(); iter++)
    3255       {
    3256         tmp= iter.getItem();
    3257         while (fdivides (myGetVars (ii.getItem().factor()), tmp))
    3258         {
    3259           multi++;
    3260           tmp /= myGetVars (ii.getItem().factor());
    3261         }
    3262       }
    3263       if (multi == ii.getItem().exp())
    3264       {
    3265         index= 1;
    3266         for (iter= vars1; iter.hasItem(); iter++, index++)
    3267         {
    3268           while (fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
    3269           {
    3270             int index2= 1;
    3271             for (iter2= leadingCoeffs2[lengthAeval2-1]; iter2.hasItem();iter2++,
    3272                                                                       index2++)
    3273             {
    3274               if (index2 == index)
    3275                 continue;
    3276               else
    3277               {
    3278                 tmp= ii.getItem().factor();
    3279                 iter2.getItem() /= tmp;
    3280                 CFListIterator iter3= evaluation;
    3281                 for (int jj= A.level(); jj > 2; jj--, iter3++)
    3282                   tmp= tmp (iter3.getItem(), jj);
    3283                 if (!tmp.inCoeffDomain())
    3284                 {
    3285                   int index3= 1;
    3286                   for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
    3287                   {
    3288                     if (index3 == index2)
    3289                     {
    3290                       iter3.getItem() /= tmp;
    3291                       iter3.getItem() /= Lc (iter3.getItem());
    3292                       break;
    3293                     }
    3294                   }
    3295                 }
    3296                 A /= ii.getItem().factor();
    3297               }
    3298             }
    3299             iter.getItem() /= getVars (ii.getItem().factor());
    3300           }
    3301         }
    3302       }
    3303       else
    3304       {
    3305         index= 1;
    3306         for (iter= vars1; iter.hasItem(); iter++, index++)
    3307         {
    3308           if (!fdivides (myGetVars (ii.getItem().factor()), iter.getItem()))
    3309           {
    3310             int index2= 1;
    3311             for (iter2= leadingCoeffs2[lengthAeval2-1];iter2.hasItem();iter2++,
    3312                                                                       index2++)
    3313             {
    3314               if (index2 == index)
    3315               {
    3316                 tmp= power (ii.getItem().factor(), ii.getItem().exp());
    3317                 iter2.getItem() /= tmp;
    3318                 A /= tmp;
    3319                 CFListIterator iter3= evaluation;
    3320                 for (int jj= A.level(); jj > 2; jj--, iter3++)
    3321                   tmp= tmp (iter3.getItem(), jj);
    3322                 if (!tmp.inCoeffDomain())
    3323                 {
    3324                   int index3= 1;
    3325                   for (iter3= biFactors; iter3.hasItem(); iter3++, index3++)
    3326                   {
    3327                     if (index3 == index2)
    3328                     {
    3329                       iter3.getItem() /= tmp;
    3330                       iter3.getItem() /= Lc (iter3.getItem());
    3331                       break;
    3332                     }
    3333                   }
    3334                 }
    3335               }
    3336             }
    3337           }
    3338         }
    3339       }
    3340     }
     3222    LCHeuristic (A, LCmultiplier, biFactors, leadingCoeffs2, oldAeval,
     3223                 lengthAeval2, evaluation, oldBiFactors);
    33413224
    33423225    leadingCoeffs= leadingCoeffs2[lengthAeval2-1];
  • factory/facFqFactorize.h

    r58c0e4 r9b4920b  
    686686void changeSecondVariable (CanonicalForm& A, CFList& biFactors, CFList& evaluation, CFList*& oldAeval, int lengthAeval2, const CFList& uniFactors, const Variable& w);
    687687void distributeLCmultiplier (CanonicalForm& A, CFList& leadingCoeffs, CFList& biFactors, const CFList& evaluation, const CanonicalForm& LCmultipler);
     688void
     689LCHeuristic (CanonicalForm& A, const CanonicalForm& LCmultiplier,
     690             CFList& biFactors, CFList*& leadingCoeffs, const CFList* oldAeval,
     691             int lengthAeval, const CFList& evaluation,
     692             const CFList& oldBiFactors);
    688693
    689694#endif
Note: See TracChangeset for help on using the changeset viewer.