亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? polynomi.h

?? #include "pch.h" #include "base64.h" NAMESPACE_BEGIN(CryptoPP) static const int MAX_LINE_LENG
?? H
字號(hào):
#ifndef CRYPTOPP_POLYNOMI_H
#define CRYPTOPP_POLYNOMI_H

#include "cryptlib.h"
#include "misc.h"
#include "algebra.h"

#include <iosfwd>
#include <vector>

NAMESPACE_BEGIN(CryptoPP)

/// polynomials with basic arithmetics
/** This template class can represent polynomials over an arbitrary ring.
*/
template <class T> class PolynomialOver
{
public:
	//@Man: ENUMS, EXCEPTIONS, and TYPEDEFS
	//@{
		/// division by zero exception
		class DivideByZero : public Exception 
		{
		public: 
			DivideByZero() : Exception("PolynomialOver<T>: division by zero") {}
		};

		/// specify the distribution for randomization functions
		class RandomizationParameter
		{
		public:
			RandomizationParameter(unsigned int coefficientCount, const typename T::RandomizationParameter &coefficientParameter)
				: m_coefficientCount(coefficientCount), m_coefficientParameter(coefficientParameter) {}

		private:
			unsigned int m_coefficientCount;
			typename T::RandomizationParameter m_coefficientParameter;
			friend PolynomialOver<T>;
		};

		typedef T Ring;
		typedef typename T::Element CoefficientType;
	//@}

	//@Man: CREATORS
	//@{
		/// creates the zero polynomial
		PolynomialOver() {}

		///
		PolynomialOver(const Ring &ring, unsigned int count)
			: m_coefficients((size_t)count, ring.Zero()) {}

		/// copy constructor
		PolynomialOver(const PolynomialOver<Ring> &t)
			: m_coefficients(t.m_coefficients.size()) {*this = t;}

		/// construct constant polynomial
		PolynomialOver(const CoefficientType &element)
			: m_coefficients(1, element) {}

		/// construct polynomial with specified coefficients, starting from coefficient of x^0
		template <typename Iterator> PolynomialOver(Iterator first, Iterator last)
			: m_coefficients(first, last) {}

		/// convert from string
		PolynomialOver(const char *str, const Ring &ring) {FromStr(str, ring);}

		/// convert from big-endian byte array
		PolynomialOver(const byte *encodedPolynomialOver, unsigned int byteCount);

		/// convert from Basic Encoding Rules encoded byte array
		explicit PolynomialOver(const byte *BEREncodedPolynomialOver);

		/// convert from BER encoded byte array stored in a BufferedTransformation object
		explicit PolynomialOver(BufferedTransformation &bt);

		/// create a random PolynomialOver<T>
		PolynomialOver(RandomNumberGenerator &rng, const RandomizationParameter &parameter, const Ring &ring)
			{Randomize(rng, parameter, ring);}
	//@}

	//@Man: ACCESSORS
	//@{
		/// encode polynomial as a big-endian byte array, returns size of output
		unsigned int Encode(byte *output) const;
		/// use this to make sure output size is exactly outputLen
		unsigned int Encode(byte *output, unsigned int outputLen) const;

		/// encode polynomial using Distinguished Encoding Rules, returns size of output
		unsigned int DEREncode(byte *output) const;
		/// encode using DER, put result into a BufferedTransformation object
		unsigned int DEREncode(BufferedTransformation &bt) const;

		/// the zero polynomial will return a degree of -1
		int Degree(const Ring &ring) const {return int(CoefficientCount(ring))-1;}
		///
		unsigned int CoefficientCount(const Ring &ring) const;
		/// return coefficient for x^i
		CoefficientType GetCoefficient(unsigned int i, const Ring &ring) const;
	//@}

	//@Man: MANIPULATORS
	//@{
		///
		PolynomialOver<Ring>&  operator=(const PolynomialOver<Ring>& t);

		void Decode(const byte *input, unsigned int inputLen);
		void BERDecode(const byte *input);
		void BERDecode(BufferedTransformation &bt);

		///
		void Randomize(RandomNumberGenerator &rng, const RandomizationParameter &parameter, const Ring &ring);

		/// set the coefficient for x^i to value
		void SetCoefficient(unsigned int i, const CoefficientType &value, const Ring &ring);

		///
		void Negate(const Ring &ring);

		///
		void swap(PolynomialOver<Ring> &t);
	//@}


	//@Man: BASIC ARITHMETIC ON POLYNOMIALS
	//@{
		bool Equals(const PolynomialOver<Ring> &t, const Ring &ring) const;
		bool IsZero(const Ring &ring) const {return CoefficientCount(ring)==0;}

		PolynomialOver<Ring> Plus(const PolynomialOver<Ring>& t, const Ring &ring) const;
		PolynomialOver<Ring> Minus(const PolynomialOver<Ring>& t, const Ring &ring) const;
		PolynomialOver<Ring> Inverse(const Ring &ring) const;

		PolynomialOver<Ring> Times(const PolynomialOver<Ring>& t, const Ring &ring) const;
		PolynomialOver<Ring> DividedBy(const PolynomialOver<Ring>& t, const Ring &ring) const;
		PolynomialOver<Ring> Modulo(const PolynomialOver<Ring>& t, const Ring &ring) const;
		PolynomialOver<Ring> MultiplicativeInverse(const Ring &ring) const;
		bool IsUnit(const Ring &ring) const;

		PolynomialOver<Ring>& Accumulate(const PolynomialOver<Ring>& t, const Ring &ring);
		PolynomialOver<Ring>& Reduce(const PolynomialOver<Ring>& t, const Ring &ring);

		///
		PolynomialOver<Ring> Doubled(const Ring &ring) const {return Plus(*this, ring);}
		///
		PolynomialOver<Ring> Squared(const Ring &ring) const {return Times(*this, ring);}

		CoefficientType EvaluateAt(const CoefficientType &x, const Ring &ring) const;

		PolynomialOver<Ring>& ShiftLeft(unsigned int n, const Ring &ring);
		PolynomialOver<Ring>& ShiftRight(unsigned int n, const Ring &ring);

		/// calculate r and q such that (a == d*q + r) && (0 <= degree of r < degree of d)
		static void Divide(PolynomialOver<Ring> &r, PolynomialOver<Ring> &q, const PolynomialOver<Ring> &a, const PolynomialOver<Ring> &d, const Ring &ring);
	//@}

	//@Man: INPUT/OUTPUT
	//@{
		std::istream& Input(std::istream &in, const Ring &ring);
		std::ostream& Output(std::ostream &out, const Ring &ring) const;
	//@}

private:
	void FromStr(const char *str, const Ring &ring);

	std::vector<CoefficientType> m_coefficients;
};

template <class T, int instance = 0> class PolynomialOverFixedRing : private PolynomialOver<T>
{
	typedef PolynomialOver<T> B;
	typedef PolynomialOverFixedRing<T, instance> ThisType;

public:
	typedef T Ring;
	typedef typename T::Element CoefficientType;
	typedef B::DivideByZero DivideByZero;
	typedef B::RandomizationParameter RandomizationParameter;

	//@Man: CREATORS
	//@{
		/// creates the zero polynomial
		PolynomialOverFixedRing(unsigned int count = 0) : B(fixedRing, count) {}

		/// copy constructor
		PolynomialOverFixedRing(const ThisType &t) : B(t) {}

		explicit PolynomialOverFixedRing(const B &t) : B(t) {}

		/// construct constant polynomial
		PolynomialOverFixedRing(const CoefficientType &element) : B(element) {}

		/// construct polynomial with specified coefficients, starting from coefficient of x^0
		template <typename Iterator> PolynomialOverFixedRing(Iterator first, Iterator last)
			: B(first, last) {}

		/// convert from string
		explicit PolynomialOverFixedRing(const char *str) : B(str, fixedRing) {}

		/// convert from big-endian byte array
		PolynomialOverFixedRing(const byte *encodedPoly, unsigned int byteCount) : B(encodedPoly, byteCount) {}

		/// convert from Basic Encoding Rules encoded byte array
		explicit PolynomialOverFixedRing(const byte *BEREncodedPoly) : B(BEREncodedPoly) {}

		/// convert from BER encoded byte array stored in a BufferedTransformation object
		explicit PolynomialOverFixedRing(BufferedTransformation &bt) : B(bt) {}

		/// create a random PolynomialOverFixedRing
		PolynomialOverFixedRing(RandomNumberGenerator &rng, const RandomizationParameter &parameter) : B(rng, parameter, fixedRing) {}

		static const ThisType &Zero();
		static const ThisType &One();
	//@}

	//@Man: ACCESSORS
	//@{
		B::Encode;
		B::DEREncode;

		/// the zero polynomial will return a degree of -1
		int Degree() const {return B::Degree(fixedRing);}
		/// degree + 1
		unsigned int CoefficientCount() const {return B::CoefficientCount(fixedRing);}
		/// return coefficient for x^i
		CoefficientType GetCoefficient(unsigned int i) const {return B::GetCoefficient(i, fixedRing);}
		/// return coefficient for x^i
		CoefficientType operator[](unsigned int i) const {return B::GetCoefficient(i, fixedRing);}
	//@}

	//@Man: MANIPULATORS
	//@{
		///
		ThisType&  operator=(const ThisType& t) {B::operator=(t); return *this;}
		///
		ThisType&  operator+=(const ThisType& t) {Accumulate(t, fixedRing); return *this;}
		///
		ThisType&  operator-=(const ThisType& t) {Reduce(t, fixedRing); return *this;}
		///
		ThisType&  operator*=(const ThisType& t) {return *this = *this*t;}
		///
		ThisType&  operator/=(const ThisType& t) {return *this = *this/t;}
		///
		ThisType&  operator%=(const ThisType& t) {return *this = *this%t;}

		///
		ThisType&  operator<<=(unsigned int n) {ShiftLeft(n, fixedRing); return *this;}
		///
		ThisType&  operator>>=(unsigned int n) {ShiftRight(n, fixedRing); return *this;}

		B::Decode;
		B::BERDecode;

		/// set the coefficient for x^i to value
		void SetCoefficient(unsigned int i, const CoefficientType &value) {B::SetCoefficient(i, value, fixedRing);}

		///
		void Randomize(RandomNumberGenerator &rng, const RandomizationParameter &parameter) {B::Randomize(rng, parameter, fixedRing);}

		///
		void Negate() {B::Negate(fixedRing);}

		void swap(ThisType &t) {B::swap(t);}
	//@}

	//@Man: UNARY OPERATORS
	//@{
		///
		bool operator!() const {return CoefficientCount()==0;}
		///
		ThisType operator+() const {return *this;}
		///
		ThisType operator-() const {return ThisType(Inverse(fixedRing));}
	//@}

	//@Man: BINARY OPERATORS
	//@{
		///
		friend ThisType operator+(const ThisType &a, const ThisType &b)
			{return ThisType(a.Plus(b, fixedRing));}
		///
		friend ThisType operator-(const ThisType &a, const ThisType &b)
			{return ThisType(a.Minus(b, fixedRing));}
		///
		friend ThisType operator*(const ThisType &a, const ThisType &b)
			{return ThisType(a.Times(b, fixedRing));}
		///
		friend ThisType operator/(const ThisType &a, const ThisType &b)
			{return ThisType(a.DividedBy(b, fixedRing));}
		///
		friend ThisType operator%(const ThisType &a, const ThisType &b)
			{return ThisType(a.Modulo(b, fixedRing));}

		///
		friend ThisType operator>>(ThisType a, unsigned int n)	{return ThisType(a>>=n);}
		///
		friend ThisType operator<<(ThisType a, unsigned int n)	{return ThisType(a<<=n);}

		///
		friend bool operator==(const ThisType &a, const ThisType &b)
			{return a.Equals(b, fixedRing);}
		///
		friend bool operator!=(const ThisType &a, const ThisType &b)
			{return !(a==b);}

		///
		friend bool operator> (const ThisType &a, const ThisType &b)
			{return a.Degree() > b.Degree();}
		///
		friend bool operator>=(const ThisType &a, const ThisType &b)
			{return a.Degree() >= b.Degree();}
		///
		friend bool operator< (const ThisType &a, const ThisType &b)
			{return a.Degree() < b.Degree();}
		///
		friend bool operator<=(const ThisType &a, const ThisType &b)
			{return a.Degree() <= b.Degree();}
	//@}

	//@Man: OTHER ARITHMETIC FUNCTIONS
	//@{
		///
		ThisType MultiplicativeInverse() const {return ThisType(B::MultiplicativeInverse(fixedRing));}
		///
		bool IsUnit() const {return B::IsUnit(fixedRing);}

		///
		ThisType Doubled() const {return ThisType(B::Doubled(fixedRing));}
		///
		ThisType Squared() const {return ThisType(B::Squared(fixedRing));}

		CoefficientType EvaluateAt(const CoefficientType &x) const {return B::EvaluateAt(x, fixedRing);}

		/// calculate r and q such that (a == d*q + r) && (0 <= r < abs(d))
		static void Divide(ThisType &r, ThisType &q, const ThisType &a, const ThisType &d)
			{B::Divide(r, q, a, d, fixedRing);}
	//@}

	//@Man: INPUT/OUTPUT
	//@{
		///
		friend std::istream& operator>>(std::istream& in, ThisType &a)
			{return a.Input(in, fixedRing);}
		///
		friend std::ostream& operator<<(std::ostream& out, const ThisType &a)
			{return a.Output(out, fixedRing);}
	//@}

private:
	static const Ring fixedRing;
};

template <class T> class RingOfPolynomialsOver : public AbstractEuclideanDomain<PolynomialOver<T> >
{
public:
	typedef T CoefficientRing;
	typedef PolynomialOver<T> Element;
	typedef Element::CoefficientType CoefficientType;
	typedef Element::RandomizationParameter RandomizationParameter;

	RingOfPolynomialsOver(const CoefficientRing &ring) : m_ring(ring) {}

	Element RandomElement(RandomNumberGenerator &rng, const RandomizationParameter &parameter)
		{return Element(rng, parameter, m_ring);}

	bool Equal(const Element &a, const Element &b) const
		{return a.Equals(b, m_ring);}

	Element Zero() const
		{return Element();}

	Element Add(const Element &a, const Element &b) const
		{return a.Plus(b, m_ring);}

	Element& Accumulate(Element &a, const Element &b) const
		{a.Accumulate(b, m_ring); return a;}

	Element Inverse(const Element &a) const
		{return a.Inverse(m_ring);}

	Element Subtract(const Element &a, const Element &b) const
		{return a.Minus(b, m_ring);}

	Element& Reduce(Element &a, const Element &b) const
		{return a.Reduce(b, m_ring);}

	Element Double(const Element &a) const
		{return a.Doubled(m_ring);}

	Element One() const
		{return m_ring.One();}

	Element Multiply(const Element &a, const Element &b) const
		{return a.Times(b, m_ring);}

	Element Square(const Element &a) const
		{return a.Squared(m_ring);}

	bool IsUnit(const Element &a) const
		{return a.IsUnit(m_ring);}

	Element MultiplicativeInverse(const Element &a) const
		{return a.MultiplicativeInverse(m_ring);}

	Element Divide(const Element &a, const Element &b) const
		{return a.DividedBy(b, m_ring);}

	Element Mod(const Element &a, const Element &b) const
		{return a.Modulo(b, m_ring);}

	void DivisionAlgorithm(Element &r, Element &q, const Element &a, const Element &d) const
		{Element::Divide(r, q, a, d, m_ring);}

	class InterpolationFailed : public Exception
	{
	public:
		InterpolationFailed() : Exception("RingOfPolynomialsOver<T>: interpolation failed") {}
	};

	Element Interpolate(const CoefficientType x[], const CoefficientType y[], unsigned int n) const;

	// a faster version of Interpolate(x, y, n).EvaluateAt(position)
	CoefficientType InterpolateAt(const CoefficientType &position, const CoefficientType x[], const CoefficientType y[], unsigned int n) const;

protected:
	void CalculateAlpha(std::vector<CoefficientType> &alpha, const CoefficientType x[], const CoefficientType y[], unsigned int n) const;

	CoefficientRing m_ring;
};

NAMESPACE_END

NAMESPACE_BEGIN(std)
template<class T> void swap(CryptoPP::PolynomialOver<T> &a, CryptoPP::PolynomialOver<T> &b)
{
	a.swap(b);
}
template<class T, int i> void swap(CryptoPP::PolynomialOverFixedRing<T,i> &a, CryptoPP::PolynomialOverFixedRing<T,i> &b)
{
	a.swap(b);
}
NAMESPACE_END

#endif

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久国产老人久久综合| 91视频在线看| 国产高清亚洲一区| 26uuu久久天堂性欧美| 色呦呦国产精品| 国内精品自线一区二区三区视频| 中文字幕一区二区日韩精品绯色| 欧美成人一区二区三区在线观看| 91激情在线视频| 国产91精品一区二区麻豆亚洲| 午夜视频在线观看一区| 国产精品欧美极品| 久久综合999| 欧美一区二区成人| 欧美视频一区在线| 99视频超级精品| 国产福利一区二区三区视频| 日本欧美大码aⅴ在线播放| 亚洲黄色在线视频| 中文字幕在线一区免费| 精品少妇一区二区| 欧美一区二区三区在线观看| 欧美亚洲国产怡红院影院| 99精品一区二区| 成人av网址在线| 懂色av中文字幕一区二区三区| 久久99国产乱子伦精品免费| 首页综合国产亚洲丝袜| 亚洲一区二区三区中文字幕| 亚洲欧美日韩在线| 亚洲欧洲精品天堂一级| 中文天堂在线一区| 欧美国产精品v| 国产日韩欧美不卡| 国产日韩欧美制服另类| 精品精品国产高清a毛片牛牛| 欧美日韩成人在线一区| 欧美日韩国产免费一区二区 | 福利视频网站一区二区三区| 久久精品国产**网站演员| 男男gaygay亚洲| 日韩国产成人精品| 蜜臀av一区二区| 久久91精品国产91久久小草| 久久成人18免费观看| 精品在线播放午夜| 国产精品中文字幕欧美| 国产成人亚洲综合a∨婷婷 | 大白屁股一区二区视频| 国产酒店精品激情| 国产精品77777竹菊影视小说| 国产成人精品亚洲日本在线桃色| 粉嫩av一区二区三区粉嫩| 国内国产精品久久| 婷婷国产在线综合| 亚洲婷婷在线视频| 亚洲欧美二区三区| 亚洲午夜久久久| 日本不卡1234视频| 日本亚洲天堂网| 欧美日本一道本| 成人成人成人在线视频| 国产精品综合久久| eeuss鲁一区二区三区| 97se狠狠狠综合亚洲狠狠| 亚洲色欲色欲www| 激情欧美一区二区三区在线观看| 美女视频一区二区| 国产九色sp调教91| 日本道色综合久久| 日韩一区二区精品在线观看| 久久久久久久久97黄色工厂| 中文字幕一区二区日韩精品绯色| 亚洲大片精品永久免费| 蜜臀精品一区二区三区在线观看| 国产乱对白刺激视频不卡| 91一区二区在线观看| 欧美综合久久久| 欧美刺激午夜性久久久久久久 | 中文字幕一区免费在线观看| 亚洲国产欧美在线人成| 国产乱人伦精品一区二区在线观看| av在线免费不卡| 91精品国产综合久久婷婷香蕉| 久久网站最新地址| 亚洲综合网站在线观看| 狠狠色丁香婷综合久久| 色综合天天性综合| 精品国产乱码久久久久久牛牛| 亚洲色图清纯唯美| 韩国三级中文字幕hd久久精品| 99精品黄色片免费大全| 精品电影一区二区| 亚洲动漫第一页| va亚洲va日韩不卡在线观看| 欧美电影在线免费观看| 国产精品毛片无遮挡高清| 日本不卡视频在线观看| 一本大道久久精品懂色aⅴ | 国产欧美日韩在线观看| 日韩福利视频导航| 91看片淫黄大片一级| 久久网这里都是精品| 日韩电影在线一区| 欧美三级电影在线看| 亚洲日本va在线观看| 国产aⅴ综合色| 久久综合久久综合久久综合| 五月婷婷色综合| 在线观看亚洲精品视频| 国产精品国产成人国产三级| 国产精品一区二区三区网站| 欧美一级高清片| 舔着乳尖日韩一区| 欧美亚洲尤物久久| 亚洲欧美日韩在线| 99re成人精品视频| 国产精品美女一区二区三区 | 久久婷婷成人综合色| 亚洲另类春色国产| 91精品91久久久中77777| 国产欧美精品在线观看| 99久久久久免费精品国产| 午夜精品久久久久影视| 亚洲成a人片在线观看中文| 成人avav在线| 亚洲国产经典视频| 高清beeg欧美| 欧美韩日一区二区三区四区| 国产一区二区三区香蕉| 久久综合久久久久88| 美女视频网站黄色亚洲| 日韩一区二区不卡| 免费看日韩精品| 日韩一本二本av| 国产最新精品精品你懂的| 日韩一级二级三级精品视频| 蜜臀va亚洲va欧美va天堂| 日韩精品中文字幕一区二区三区| 麻豆国产精品官网| 久久亚洲精华国产精华液| 久久99国产精品久久| 国产午夜精品福利| 不卡一卡二卡三乱码免费网站| 亚洲欧洲日韩在线| 欧美在线999| 日韩av网站在线观看| 亚洲精品一区二区三区四区高清| 国产一区美女在线| 国产精品天干天干在线综合| 成人性生交大片免费看中文| 亚洲男人的天堂在线aⅴ视频 | 精品一区中文字幕| 国产午夜亚洲精品理论片色戒| 国产suv一区二区三区88区| 日本一区二区不卡视频| 99视频一区二区三区| 夜夜嗨av一区二区三区网页| 7878成人国产在线观看| 国产一区啦啦啦在线观看| 欧美激情综合网| 一本一本大道香蕉久在线精品 | 中文在线资源观看网站视频免费不卡 | 欧美精品少妇一区二区三区| 蜜臂av日日欢夜夜爽一区| 国产欧美一区二区三区沐欲| 91在线播放网址| 免费高清在线一区| 国产精品免费观看视频| 欧美日韩高清影院| 国产精品资源在线看| 亚洲欧美成aⅴ人在线观看| 91精品国产一区二区人妖| 成人美女视频在线观看| 午夜久久电影网| 国产精品污污网站在线观看| 91福利精品第一导航| 精品亚洲成a人| 一级中文字幕一区二区| 久久免费的精品国产v∧| 91福利社在线观看| 国产成都精品91一区二区三 | 国产不卡在线播放| 亚洲成人综合网站| 中文字幕电影一区| 日韩一区二区免费视频| 色婷婷av久久久久久久| 国产在线视视频有精品| 亚洲综合在线电影| 国产精品久久久久一区二区三区| 91精品国产综合久久久蜜臀图片| av在线播放不卡| 国产一区在线观看麻豆| 丝袜亚洲精品中文字幕一区| 国产精品国产成人国产三级| 精品国产乱码久久久久久久 | 欧美日本免费一区二区三区| 成人做爰69片免费看网站| 日本欧美久久久久免费播放网| 亚洲欧美在线另类|