Macaulay2 Engine
Loading...
Searching...
No Matches

◆ rawZZfactor()

gmp_arrayZZ rawZZfactor ( gmp_ZZ x)

Definition at line 46 of file flint.cpp.

47{
48 fmpz_t n;
49 fmpz_init(n);
50 fmpz_set_mpz(n, x);
51 //std::cout << "factoring fmpz " << static_cast<void*>(n) << std::endl;
52 fmpz_factor_t factor;
53 fmpz_factor_init(factor);
54 fmpz_factor(factor,n);
55 int len = factor->num;
56 gmp_arrayZZ result = getmemarraytype(gmp_arrayZZ,2*len+1);
57 result->len = 2*len+1;
58 __mpz_struct *tmp;
59 // The sign is the first element of the result.
60 tmp = newitem(__mpz_struct);
61 mpz_init(tmp);
62 mpz_set_si(tmp, factor->sign);
64 result->array[0] = tmp;
65 for (int i=0; i<len; i++) {
66 // Get the i-th factor
67 tmp = newitem(__mpz_struct);
68 mpz_init(tmp);
69 fmpz_get_mpz(tmp,factor->p + i);
71 result->array[2*i+1] = tmp;
72 // Get the i-th factor and its exponent
73 tmp = newitem(__mpz_struct);
74 mpz_init(tmp);
75 fmpz_get_mpz(tmp,(fmpz *)(factor->exp + i));
77 result->array[2*i+2] = tmp;
78 }
79 fmpz_factor_clear(factor);
80 fmpz_clear(n);
81 return result;
82}
void mpz_reallocate_limbs(mpz_ptr _z)
Definition gmp-util.h:46
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define getmemarraytype(S, len)
Definition m2-mem.h:142
#define newitem(T)
Definition newdelete.hpp:86
volatile int x

References getmemarraytype, mpz_reallocate_limbs(), newitem, result(), and x.