📄 gf2.h
字号:
#ifndef NTL_GF2__H#define NTL_GF2__H#include <NTL/ZZ.h>NTL_OPEN_NNSclass GF2 {public:long _GF2__rep;GF2() { _GF2__rep = 0; }GF2(const GF2& a) : _GF2__rep(a._GF2__rep) { }~GF2() { }GF2& operator=(const GF2& a) { _GF2__rep = a._GF2__rep; return *this; }GF2& operator=(long a) { _GF2__rep = a & 1; return *this; }};inline void conv(GF2& x, long a) { x._GF2__rep = a & 1; }inline GF2 to_GF2(long a) { GF2 x; conv(x, a); return x; }inline void conv(GF2& x, const ZZ& a) { x._GF2__rep = IsOdd(a); }inline GF2 to_GF2(const ZZ& a) { GF2 x; conv(x, a); return x; }inline long rep(GF2 a) { return a._GF2__rep; }static long modulus() { return 2; }static GF2 zero() { return GF2(); }inline void clear(GF2& x) { x._GF2__rep = 0; }inline void set(GF2& x) { x._GF2__rep = 1; }inline void swap(GF2& x, GF2& y) { long t; t = x._GF2__rep; x._GF2__rep = y._GF2__rep; y._GF2__rep = t; }inline void add(GF2& x, GF2 a, GF2 b) { x._GF2__rep = a._GF2__rep ^ b._GF2__rep; }inline void sub(GF2& x, GF2 a, GF2 b) { x._GF2__rep = a._GF2__rep ^ b._GF2__rep; }inline void negate(GF2& x, GF2 a) { x._GF2__rep = a._GF2__rep; }inline void add(GF2& x, GF2 a, long b) { x._GF2__rep = a._GF2__rep ^ (b & 1); }inline void add(GF2& x, long a, GF2 b) { x._GF2__rep = (a & 1) ^ b._GF2__rep; }inline void sub(GF2& x, GF2 a, long b) { x._GF2__rep = a._GF2__rep ^ (b & 1); }inline void sub(GF2& x, long a, GF2 b) { x._GF2__rep = (a & 1) ^ b._GF2__rep; }inline GF2 operator+(GF2 a, GF2 b) { GF2 x; add(x, a, b); return x; }inline GF2 operator+(GF2 a, long b) { GF2 x; add(x, a, b); return x; }inline GF2 operator+(long a, GF2 b) { GF2 x; add(x, a, b); return x; }inline GF2 operator-(GF2 a, GF2 b) { GF2 x; sub(x, a, b); return x; }inline GF2 operator-(GF2 a, long b) { GF2 x; sub(x, a, b); return x; }inline GF2 operator-(long a, GF2 b) { GF2 x; sub(x, a, b); return x; }inline GF2 operator-(GF2 a) { GF2 x; negate(x, a); return x; }inline GF2& operator+=(GF2& x, GF2 b) { add(x, x, b); return x; }inline GF2& operator+=(GF2& x, long b) { add(x, x, b); return x; }inline GF2& operator-=(GF2& x, GF2 b) { sub(x, x, b); return x; }inline GF2& operator-=(GF2& x, long b) { sub(x, x, b); return x; }inline GF2& operator++(GF2& x) { add(x, x, 1); return x; }inline void operator++(GF2& x, int) { add(x, x, 1); }inline GF2& operator--(GF2& x) { sub(x, x, 1); return x; }inline void operator--(GF2& x, int) { sub(x, x, 1); }inline void mul(GF2& x, GF2 a, GF2 b) { x._GF2__rep = a._GF2__rep & b._GF2__rep; }inline void mul(GF2& x, GF2 a, long b) { x._GF2__rep = a._GF2__rep & b; }inline void mul(GF2& x, long a, GF2 b) { x._GF2__rep = a & b._GF2__rep; }inline void sqr(GF2& x, GF2 a) { x = a; }inline GF2 sqr(GF2 a) { return a; }inline GF2 operator*(GF2 a, GF2 b) { GF2 x; mul(x, a, b); return x; }inline GF2 operator*(GF2 a, long b) { GF2 x; mul(x, a, b); return x; }inline GF2 operator*(long a, GF2 b) { GF2 x; mul(x, a, b); return x; }inline GF2& operator*=(GF2& x, GF2 b) { mul(x, x, b); return x; }inline GF2& operator*=(GF2& x, long b) { mul(x, x, b); return x; }void div(GF2& x, GF2 a, GF2 b);void div(GF2& x, long a, GF2 b);void div(GF2& x, GF2 a, long b);void inv(GF2& x, GF2 a);inline GF2 inv(GF2 a) { GF2 x; inv(x, a); return x; }inline GF2 operator/(GF2 a, GF2 b) { GF2 x; div(x, a, b); return x; }inline GF2 operator/(GF2 a, long b) { GF2 x; div(x, a, b); return x; }inline GF2 operator/(long a, GF2 b) { GF2 x; div(x, a, b); return x; }inline GF2& operator/=(GF2& x, GF2 b) { div(x, x, b); return x; }inline GF2& operator/=(GF2& x, long b) { div(x, x, b); return x; }void power(GF2& x, GF2 a, long e);inline GF2 power(GF2 a, long e) { GF2 x; power(x, a, e); return x; }inline long IsZero(GF2 a) { return a._GF2__rep == 0; }inline long IsOne(GF2 a) { return a._GF2__rep == 1; }inline long operator==(GF2 a, GF2 b) { return a._GF2__rep == b._GF2__rep; }inline long operator!=(GF2 a, GF2 b) { return !(a == b); }inline long operator==(GF2 a, long b) { return a._GF2__rep == (b & 1); }inline long operator==(long a, GF2 b) { return (a & 1) == b._GF2__rep; }inline long operator!=(GF2 a, long b) { return !(a == b); }inline long operator!=(long a, GF2 b) { return !(a == b); }inline void random(GF2& x) { x._GF2__rep = RandomBnd(2); }inline GF2 random_GF2() { GF2 x; random(x); return x; }NTL_SNS ostream& operator<<(NTL_SNS ostream& s, GF2 a);NTL_SNS istream& operator>>(NTL_SNS istream& s, GF2& x);NTL_CLOSE_NNS#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -