[BACK]Return to ntl.cpp CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_ntl

Diff for /OpenXM/src/ox_ntl/ntl.cpp between version 1.2 and 1.5

version 1.2, 2003/11/08 12:34:00 version 1.5, 2004/07/04 02:31:51
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/ox_ntl/ntl.cpp,v 1.1 2003/11/03 03:11:21 iwane Exp $ */  /* $OpenXM: OpenXM/src/ox_ntl/ntl.cpp,v 1.4 2003/11/17 12:04:20 iwane Exp $ */
   
 #include <NTL/ZZXFactoring.h>  #include <NTL/ZZXFactoring.h>
   #include <NTL/LLL.h>
   
 #include "ox_toolkit.h"  #include "ox_toolkit.h"
 #include "ntl.h"  #include "ntl.h"
Line 9 
Line 10 
 #define __NTL_PRINT (1)  #define __NTL_PRINT (1)
 #endif  #endif
   
   #define DPRINTF(x)      printf x; fflush(stdout)
   
 /****************************************************************************  /****************************************************************************
  *   *
  * Factorize polynomial over the integers.   * Factorize polynomial over the integers.
Line 27  ntl_fctr(cmo **arg, int argc)
Line 30  ntl_fctr(cmo **arg, int argc)
         cmo *poly = arg[0];          cmo *poly = arg[0];
         cmo_indeterminate *x;          cmo_indeterminate *x;
         ZZX f;          ZZX f;
         ZZ c;  
   
         int ret;          int ret;
   
         vec_pair_ZZX_long factors;  
   
         cmo_list *ans;  
         cmo *fcts;  
   
         if (argc != 1) {          if (argc != 1) {
                 return ((cmo *)new_cmo_error2((cmo *)new_cmo_string("Invalid Parameter(#)")));                  return ((cmo *)new_cmo_error2((cmo *)new_cmo_string("Invalid Parameter(#)")));
         }          }
Line 50  ntl_fctr(cmo **arg, int argc)
Line 46  ntl_fctr(cmo **arg, int argc)
         cout << "input: " << f << endl;          cout << "input: " << f << endl;
 #endif  #endif
   
         factor(c, factors, f);          cmon_factors_t *factors = new_cmon_factors();
           factors->x = x;
   
           factor(*factors->cont, *factors->f, f);
   
 #if __NTL_PRINT  #if __NTL_PRINT
         cout << "fctr : " << factors << endl;          cout << "fctr : " << *factors->f << endl;
 #endif  #endif
   
         cmo_zz *zz = ZZ_to_cmo_zz(c);  
   
         ans = new_cmo_list();          return ((cmo *)factors);
   }
   
         fcts = (cmo *)vec_pair_ZZX_long_to_cmo(factors, x);  /****************************************************************************
    *
    * Factorize polynomial over the integers.
    *
    * PARAM : I : arg  : polynomial
    *       : I : argc :
    * RETURN: [num,[[factor1,multiplicity1],[factor2,multiplicity2],...]]
    *
    * EX    : ntl_fctr([2*x^11+4*x^8-2*x^6+2*x^5-4*x^3-2],1) ==>
            : [2,[[x-1,1],[x^4+x^3+x^2+x+1,1],[x+1,2],[x^2-x+1,2]]]
    *
    ****************************************************************************/
   cmo *
   ntl_lll(cmo **arg, int argc)
   {
           ZZX f;
           int ret;
           cmon_mat_zz_t *mat;
   
         list_appendl(ans, zz, (cmo *)fcts, NULL);          if (argc != 1) {
                   return ((cmo *)new_cmo_error2((cmo *)new_cmo_string("Invalid Parameter(#)")));
           }
   
         return ((cmo *)ans);          mat = new_cmon_mat_zz();
           ret = cmo_to_mat_zz(*mat->mat, arg[0]);
           if (ret != NTL_SUCCESS) {
                   delete_cmon_mat_zz(mat);
                   /* format error */
                   return ((cmo *)new_cmo_error2((cmo *)new_cmo_string("Invalid Parameter(type)")));
           }
   
   #if __NTL_PRINT
           cout << "input: " << (*mat->mat) << endl;
   #endif
   
           ZZ det2;
           mat_ZZ U;
           long rd = LLL(det2, *mat->mat, U);
   
   #if __NTL_PRINT
           cout << "output: " << (*mat->mat) << endl;
           cout << U << endl;
   #endif
   
           return ((cmo *)mat);
 }  }
   
   
 #if __NTL_DEBUG  
   
   #if __NTL_DEBUG /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
   
   #include <unistd.h>
   #include <gc/gc.h>
   #include <strstream>
   #include "gmp.h"
   
   void ntl_free(void *ptr, size_t size) {}
   
   void *ntl_realloc(void *org, size_t old, size_t size)
   {
           void *ptr = GC_realloc(org, size);
           return (ptr);
   }
   
   
 int  int
 main(int argc, char *argv[])  main(int argc, char *argv[])
 {  {
   #if 0
   {
         ZZX f;          ZZX f;
         const char *str = "[1 -1 -1 1]";          const char *str = "12345";
         int num = 1;          int num = 1;
         char *var = "x";          char *var = "x";
         cmo *c;          cmo *c;
Line 88  main(int argc, char *argv[])
Line 144  main(int argc, char *argv[])
         arg[0] = (cmo *)poly;          arg[0] = (cmo *)poly;
   
         c = ntl_fctr(arg, num);          c = ntl_fctr(arg, num);
   }
   #endif
   
   {
           cmo_zz *n;
   
           istrstream istr("[3 -3 -6]");
           ZZ cont;
           ZZX fac;
           vec_pair_ZZX_long facs;
           cmo_indeterminate *x = new_cmo_indeterminate((cmo *)new_cmo_string("x"));
           istr >> fac;
   
           factor(cont, facs, fac);
   
           //      mpz_clear(ppp->mpz);
           mp_set_memory_functions(GC_malloc, ntl_realloc, ntl_free);
           for (int i = 0;; i++) {
   
                   cmon_factors_t *mat = new_cmon_factors(cont, facs, x);
                   cmo *aaa = convert_cmon((cmo *)mat);
                   delete_cmon((cmo *)mat);
   
                   if (i % 1000 == 0) {
                           printf("GC-counts: %d,   size: %u\n", GC_gc_no, GC_get_heap_size());
                           GC_gcollect();
                           usleep(1);
                   }
           }
   }
   
   
         return (0);          return (0);
 }  }
   
 #endif  #endif /* __NTL_DEBUG @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
   

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.5

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>