2 #ifndef _BIG_PRIME_FIELD_H_ 3 #define _BIG_PRIME_FIELD_H_ 5 #include "BPASFiniteField.hpp" 31 static mpz_class prime;
37 static RingProperties properties;
81 static void setPrime(mpz_class p){
86 mpz_class Prime()
const;
88 mpz_class number()
const;
90 void whichprimefield();
93 return BigPrimeField::findPrimitiveRootofUnity(mpz_class(n));
98 if ( ((prime - 1) % n != 0)){
99 cout <<
"ERROR: n does not divide prime - 1." << endl;
103 mpz_class q = (prime - 1) / n;
107 mpz_class test = q * n / 2;
111 if ((c^test) == p1) {
118 cout <<
"No primitive root found!"<< endl;
149 inline bool isNegativeOne()
const {
150 return (a == (prime - 1));
153 inline void negativeOne() {
157 inline int isConstant()
const {
169 inline bool operator== (
const mpz_class& k)
const {
197 inline bool operator!= (
const mpz_class& k)
const {
340 mpz_class b(std::to_string(c), 10);
406 std::cout <<
"BPAS: error, dividend is zero from SmallPrimeField."<< std::endl;
466 std::vector<BigPrimeField> ret;
467 ret.push_back(*
this);
475 return (*this).number();
504 if (!mpz_invert(temp, a.get_mpz_t(), prime.get_mpz_t()))
506 mpz_class temp_class(temp);
ExpressionTree convertToExpressionTree() const
Convert this to an expression tree.
Definition: BigPrimeField.hpp:383
BigPrimeField quotient(const BigPrimeField &b) const
Get the quotient of *this and b.
BigPrimeField remainder(const BigPrimeField &b) const
Get the remainder of *this and b.
BigPrimeField euclideanSize() const
Get the euclidean size of *this.
Definition: BigPrimeField.hpp:474
BigPrimeField & operator^=(long long int c)
Exponentiation assignment.
Definition: BigPrimeField.hpp:373
A univariate polynomial over an arbitrary BPASRing represented sparsely.
Definition: BigPrimeField.hpp:21
bool isZero() const
Determine if *this ring element is zero, that is the additive identity.
Definition: BigPrimeField.hpp:133
An arbitrary-precision complex rational number.
Definition: ComplexRationalNumber.hpp:23
void one()
Make *this ring element one.
Definition: BigPrimeField.hpp:145
BigPrimeField operator*(const BigPrimeField &c) const
Multiplication.
Definition: BigPrimeField.hpp:300
BigPrimeField & operator+=(const BigPrimeField &c)
Addition assignment.
Definition: BigPrimeField.hpp:236
An ExpressionTree encompasses various forms of data that can be expressed generically as a binary tre...
Definition: ExpressionTree.hpp:17
BigPrimeField gcd(const BigPrimeField &other) const
Get GCD of *this and other.
Definition: BigPrimeField.hpp:433
A finite field whose prime should be a generalized fermat number.
Definition: GeneralizedFermatPrimeField.hpp:36
BigPrimeField & operator/=(const BigPrimeField &c)
Exact division assignment.
Definition: BigPrimeField.hpp:404
BigPrimeField unitCanonical(BigPrimeField *u=NULL, BigPrimeField *v=NULL) const
Obtain the unit normal (a.k.a canonical associate) of an element.
A prime field whose prime is 32 bits or less.
Definition: SmallPrimeField.hpp:449
BigPrimeField extendedEuclidean(const BigPrimeField &b, BigPrimeField *s=NULL, BigPrimeField *t=NULL) const
Perform the extended euclidean division on *this and b.
A univariate polynomial with Integer coefficients using a dense representation.
Definition: uzpolynomial.h:13
bool operator!=(const BigPrimeField &c) const
Inequality test,.
Definition: BigPrimeField.hpp:191
BigPrimeField operator^(long long int c) const
Exponentiation.
Definition: BigPrimeField.hpp:338
BigPrimeField & operator*=(const BigPrimeField &c)
Multiplication assignment.
Definition: BigPrimeField.hpp:315
bool operator==(const BigPrimeField &c) const
Equality test,.
Definition: BigPrimeField.hpp:163
A univariate polynomial with RationalNumber coefficients represented densely.
Definition: urpolynomial.h:15
A prime field whose prime can be arbitrarily large.
Definition: BigPrimeField.hpp:27
BigPrimeField operator%(const BigPrimeField &c) const
Get the remainder of *this and b;.
Definition: BigPrimeField.hpp:424
BigPrimeField operator-() const
Negation.
Definition: BigPrimeField.hpp:294
BigPrimeField & operator-=(const BigPrimeField &c)
Subtraction assignment.
Definition: BigPrimeField.hpp:272
A simple data structure for encapsulating a collection of Factor elements.
Definition: Factors.hpp:95
BigPrimeField & operator%=(const BigPrimeField &c)
Assign *this to be the remainder of *this and b.
Definition: BigPrimeField.hpp:428
An arbitrary-precision Integer.
Definition: Integer.hpp:22
bool isOne() const
Determine if *this ring element is one, that is the multiplication identity.
Definition: BigPrimeField.hpp:141
void zero()
Make *this ring element zero.
Definition: BigPrimeField.hpp:137
BigPrimeField operator/(const BigPrimeField &c) const
Exact division.
Definition: BigPrimeField.hpp:387
An arbitrary-precision rational number.
Definition: RationalNumber.hpp:24
BigPrimeField operator+(const BigPrimeField &c) const
Addition.
Definition: BigPrimeField.hpp:219
virtual mpz_class characteristic()
The characteristic of this ring class.
Definition: BPASRing.hpp:88
Factors< BigPrimeField > squareFree() const
Compute squarefree factorization of *this.
Definition: BigPrimeField.hpp:465
BigPrimeField euclideanDivision(const BigPrimeField &b, BigPrimeField *q=NULL) const
Perform the eucldiean division of *this and b.
BigPrimeField & operator=(const BigPrimeField &c)
Copy assignment.
BigPrimeField inverse() const
Get the inverse of *this.
Definition: BigPrimeField.hpp:500
ExprTreeNode is a single node in the bianry tree of an ExpressionTree.
Definition: ExprTreeNode.hpp:76
An abstract class defining the interface of a prime field.
Definition: BPASFiniteField.hpp:12