Changeset 5f92d8 in git


Ignore:
Timestamp:
Mar 6, 2012, 12:03:45 PM (11 years ago)
Author:
Martin Lee <martinlee84@…>
Branches:
(u'spielwiese', '828514cf6e480e4bafc26df99217bf2a1ed1ef45')
Children:
4a0a30398a875d80f01a41e504fcf8ad0cfd7541
Parents:
4e6d2aac480d2946ef572d24bd5dd72906cf1e57
git-author:
Martin Lee <martinlee84@web.de>2012-03-06 12:03:45+01:00
git-committer:
Martin Lee <martinlee84@web.de>2012-04-04 14:42:26+02:00
Message:
chg: added coeff bound for polys over Q(a)
chg: renamed find_good_prime to findGoodPrime
chg: added coeffBound and findGoodPrime to facBivar.h
Location:
factory
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • factory/facBivar.cc

    r4e6d2a r5f92d8  
    3030TIMING_DEFINE_PRINT(hensel_lift12)
    3131
    32 static modpk
     32// bound on coeffs of f (cf. Musser: Multivariate Polynomial Factorization,
     33//                          Gelfond: Transcendental and Algebraic Numbers)
     34modpk
    3335coeffBound ( const CanonicalForm & f, int p )
    3436{
    3537    int * degs = degrees( f );
    3638    int M = 0, i, k = f.level();
     39    CanonicalForm b= 1;
    3740    for ( i = 1; i <= k; i++ )
    38         M += degs[i];
    39     CanonicalForm b = 2 * maxNorm( f ) * power( CanonicalForm( 3 ), M );
     41    {
     42      M += degs[i];
     43      b *= degs[i] + 1;
     44    }
     45    b /= power (CanonicalForm (2), k);
     46    b= b.sqrt() + 1;
     47    b *= 2 * maxNorm( f ) * power( CanonicalForm( 2 ), M );
    4048    CanonicalForm B = p;
    4149    k = 1;
     
    4755}
    4856
    49 static
    50 void find_good_prime(const CanonicalForm &f, int &start)
     57void findGoodPrime(const CanonicalForm &f, int &start)
    5158{
    5259  if (! f.inBaseDomain() )
     
    5764      if  ( i.hasTerms() )
    5865      {
    59         find_good_prime(i.coeff(),start);
     66        findGoodPrime(i.coeff(),start);
    6067        if (0==cf_getBigPrime(start)) return;
    6168        if((i.exp()!=0) && ((i.exp() % cf_getBigPrime(start))==0))
     
    8188    }
    8289  }
     90}
     91
     92modpk
     93coeffBound ( const CanonicalForm & f, int p, const CanonicalForm& mipo )
     94{
     95    int * degs = degrees( f );
     96    int M = 0, i, k = f.level();
     97    CanonicalForm K= 1;
     98    for ( i = 1; i <= k; i++ )
     99    {
     100        M += degs[i];
     101        K *= degs[i] + 1;
     102    }
     103    K /= power (CanonicalForm (2), k);
     104    K= K.sqrt()+1;
     105    K *= power (CanonicalForm (2), M);
     106    int N= degree (mipo);
     107    CanonicalForm b;
     108    b= 2*power (maxNorm (f), N)*power (maxNorm (mipo), 4*N)*K*power (CanonicalForm (2), N)*(CanonicalForm (M+1).sqrt()+1)*power (CanonicalForm (N+1).sqrt()+1, 7*N);
     109    b /= power (abs (lc (mipo)), N);
     110
     111    ZZX NTLmipo= convertFacCF2NTLZZX (mipo);
     112    ZZX NTLLcf= convertFacCF2NTLZZX (Lc (f));
     113    ZZ NTLf= resultant (NTLmipo, NTLLcf);
     114    ZZ NTLD= discriminant (NTLmipo);
     115    b /= abs (convertZZ2CF (NTLf))*abs (convertZZ2CF (NTLD));
     116
     117    CanonicalForm B = p;
     118    k = 1;
     119    while ( B < b ) {
     120        B *= p;
     121        k++;
     122    }
     123    return modpk( p, k );
    83124}
    84125
     
    591632    Off (SW_RATIONAL);
    592633    int i= 0;
    593     find_good_prime(F,i);
    594     find_good_prime(Aeval,i);
    595     find_good_prime(A,i);
     634    findGoodPrime(F,i);
     635    findGoodPrime(Aeval,i);
     636    findGoodPrime(A,i);
    596637    if (i >= cf_getNumBigPrimes())
    597638      printf ("out of primes\n"); //TODO exit
  • factory/facBivar.h

    r4e6d2a r5f92d8  
    275275            );
    276276
     277modpk
     278coeffBound ( const CanonicalForm & f, int p, const CanonicalForm& mipo );
     279
     280void findGoodPrime(const CanonicalForm &f, int &start);
     281
     282modpk
     283coeffBound ( const CanonicalForm & f, int p );
     284
    277285#endif
    278286
Note: See TracChangeset for help on using the changeset viewer.