To execute the main file - Type "make main" into the directory to complile the file - Type "./main to execute the program //Major functions //This preforms hensel lifting on n factors to factor polynomial A (using our Cubic complexity algorithm) int HenselLiftCubic(LONG *A, int dx, int dy, LONG *F0, int n, int du, LONG *F, LONG alpha, LONG *W, LONG p ){ /* n - number of factors du - degree bound of initial factors (could be extended to an array later) //max(degree(f_i,x)) for i = 1..n dx - degree bound on variable x of A dy - degree bound on variable y of A A[x][y]- polynomial you wish to factor. This is an array of size (dx+1)*(dy+1). It's oriented in the following way. The first dx+1 spaces stores the coefficients for the polynomial coeff(A,y^0). The second dx+1 spaces stores the coefficients for the polynomial coeff(A,y^1), and so on. F0 - set of initial n factors s.t. A-F0_1*F0_2*...*F0_n mod p = 0. This is an array of size n*(du+1). It's oriented in the following way. The first du+1 spaces stores the coefficients for the first factor. The second dx+1 spaces stores the coefficients for the second factors, and so on. F - array that will store the final polynomials. must be of size n*(dx+1)*(dy+1) W - working array for calculations. The space is allocated during the program alpha - LONG integer - Solves the factors in the form f_i = f_{i,0} + f_{i,1}*(y-alpha)^1 + ... p - prime */ The first dx+1 spaces stores the coefficients for the polynomial coeff(A,y^0). The second dx+1 spaces stores the coefficients for the polynomial coeff(A,y^1). //This preforms hensel lifting on n factors to factor polynomial A (using Bernardin's Quartic complexity algorithm) int HenselLiftQuartic(LONG *A, int dx, int dy, LONG *F0, int n, int du, LONG *F, LONG alpha, LONG *W, LONG p ){ //The variables are denoted the same as in the cubic function //calculates A - F_1*F_2*...*F_n. It will output 0 if correct void ComparePolyFactorsBivar(LONG *A,LONG *F,int dx,int dy,int n,LONG alpha,LONG p){ A[x][y]- polynomial you wish to factor. This is an array of size (dx+1)*(dy+1). It's oriented the same as in the cubic algorithm F - arry of size n*(dx+1)*(dy+1). Holds the n factors of A. The first (dx+1)*(dy+1) spaces holds the first factor, and so on... dx - degree bound of A in x // deg(A,x) dy - degree bound of A in y // deg(A,y) n - number of factors alpha - for the taylor representation of the factors. p - prime.