📄 polynomi_8h-source.html
字号:
<a name="l00087"></a><a class="code" href="class_polynomial_over.html#_polynomial_over_fixed_ringz59_0">00087</a> <span class="comment"></span> <span class="keywordtype">int</span> <a class="code" href="class_polynomial_over.html#_polynomial_over_fixed_ringz59_0">Degree</a>(<span class="keyword">const</span> Ring &ring)<span class="keyword"> const </span>{<span class="keywordflow">return</span> int(CoefficientCount(ring))-1;}<span class="comment"></span>00088 <span class="comment"> //!</span>00089 <span class="comment"></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> CoefficientCount(<span class="keyword">const</span> Ring &ring) <span class="keyword">const</span>;<span class="comment"></span>00090 <span class="comment"> //! return coefficient for x^i</span>00091 <span class="comment"></span> CoefficientType <a class="code" href="class_polynomial_over.html#_polynomial_over_fixed_ringz59_2">GetCoefficient</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, <span class="keyword">const</span> Ring &ring) <span class="keyword">const</span>;<span class="comment"></span>00092 <span class="comment"> //@}</span>00093 <span class="comment"></span><span class="comment"></span>00094 <span class="comment"> //! \name MANIPULATORS</span>00095 <span class="comment"></span><span class="comment"> //@{</span>00096 <span class="comment"></span><span class="comment"> //!</span>00097 <span class="comment"></span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a>& operator=(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a>& t);00098 <span class="comment"></span>00099 <span class="comment"> //!</span>00100 <span class="comment"></span> <span class="keywordtype">void</span> Randomize(<a class="code" href="class_random_number_generator.html">RandomNumberGenerator</a> &rng, <span class="keyword">const</span> RandomizationParameter &parameter, <span class="keyword">const</span> Ring &ring);00101 <span class="comment"></span>00102 <span class="comment"> //! set the coefficient for x^i to value</span>00103 <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="class_polynomial_over.html#_polynomial_over_fixed_ringz61_1">SetCoefficient</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i, <span class="keyword">const</span> CoefficientType &value, <span class="keyword">const</span> Ring &ring);00104 <span class="comment"></span>00105 <span class="comment"> //!</span>00106 <span class="comment"></span> <span class="keywordtype">void</span> Negate(<span class="keyword">const</span> Ring &ring);00107 <span class="comment"></span>00108 <span class="comment"> //!</span>00109 <span class="comment"></span> <span class="keywordtype">void</span> swap(<a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> &t);<span class="comment"></span>00110 <span class="comment"> //@}</span>00111 <span class="comment"></span>00112 <span class="comment"></span>00113 <span class="comment"> //! \name BASIC ARITHMETIC ON POLYNOMIALS</span>00114 <span class="comment"></span><span class="comment"> //@{</span>00115 <span class="comment"></span> <span class="keywordtype">bool</span> Equals(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> &t, <span class="keyword">const</span> Ring &ring) <span class="keyword">const</span>;00116 <span class="keywordtype">bool</span> IsZero(<span class="keyword">const</span> Ring &ring)<span class="keyword"> const </span>{<span class="keywordflow">return</span> CoefficientCount(ring)==0;}00117 00118 <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> Plus(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a>& t, <span class="keyword">const</span> Ring &ring) <span class="keyword">const</span>;00119 <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> Minus(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a>& t, <span class="keyword">const</span> Ring &ring) <span class="keyword">const</span>;00120 <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> Inverse(<span class="keyword">const</span> Ring &ring) <span class="keyword">const</span>;00121 00122 <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> Times(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a>& t, <span class="keyword">const</span> Ring &ring) <span class="keyword">const</span>;00123 <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> DividedBy(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a>& t, <span class="keyword">const</span> Ring &ring) <span class="keyword">const</span>;00124 <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> Modulo(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a>& t, <span class="keyword">const</span> Ring &ring) <span class="keyword">const</span>;00125 <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> MultiplicativeInverse(<span class="keyword">const</span> Ring &ring) <span class="keyword">const</span>;00126 <span class="keywordtype">bool</span> IsUnit(<span class="keyword">const</span> Ring &ring) <span class="keyword">const</span>;00127 00128 <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a>& Accumulate(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a>& t, <span class="keyword">const</span> Ring &ring);00129 <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a>& Reduce(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a>& t, <span class="keyword">const</span> Ring &ring);00130 <span class="comment"></span>00131 <span class="comment"> //!</span>00132 <span class="comment"></span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> Doubled(<span class="keyword">const</span> Ring &ring)<span class="keyword"> const </span>{<span class="keywordflow">return</span> Plus(*<span class="keyword">this</span>, ring);}<span class="comment"></span>00133 <span class="comment"> //!</span>00134 <span class="comment"></span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> Squared(<span class="keyword">const</span> Ring &ring)<span class="keyword"> const </span>{<span class="keywordflow">return</span> Times(*<span class="keyword">this</span>, ring);}00135 00136 CoefficientType EvaluateAt(<span class="keyword">const</span> CoefficientType &x, <span class="keyword">const</span> Ring &ring) <span class="keyword">const</span>;00137 00138 <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a>& ShiftLeft(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> Ring &ring);00139 <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a>& ShiftRight(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n, <span class="keyword">const</span> Ring &ring);00140 <span class="comment"></span>00141 <span class="comment"> //! calculate r and q such that (a == d*q + r) && (0 <= degree of r < degree of d)</span>00142 <span class="comment"></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="class_polynomial_over.html#_polynomial_over_fixed_ringz63_17">Divide</a>(<a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> &r, <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> &q, <span class="keyword">const</span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> &a, <span class="keyword">const</span> <a class="code" href="class_polynomial_over.html">PolynomialOver<Ring></a> &d, <span class="keyword">const</span> Ring &ring);<span class="comment"></span>00143 <span class="comment"> //@}</span>00144 <span class="comment"></span><span class="comment"></span>00145 <span class="comment"> //! \name INPUT/OUTPUT</span>00146 <span class="comment"></span><span class="comment"> //@{</span>00147 <span class="comment"></span> std::istream& Input(std::istream &in, <span class="keyword">const</span> Ring &ring);00148 std::ostream& Output(std::ostream &out, <span class="keyword">const</span> Ring &ring) <span class="keyword">const</span>;<span class="comment"></span>00149 <span class="comment"> //@}</span>00150 <span class="comment"></span>00151 <span class="keyword">private</span>:00152 <span class="keywordtype">void</span> FromStr(<span class="keyword">const</span> <span class="keywordtype">char</span> *str, <span class="keyword">const</span> Ring &ring);00153 00154 std::vector<CoefficientType> m_coefficients;00155 };00156 <span class="comment"></span>00157 <span class="comment">//! Polynomials over a fixed ring</span>00158 <span class="comment"></span><span class="comment">/*! Having a fixed ring allows overloaded operators */</span><a name="l00159"></a><a class="code" href="class_polynomial_over_fixed_ring.html">00159</a> <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keywordtype">int</span> instance> <span class="keyword">class </span><a class="code" href="class_polynomial_over_fixed_ring.html">PolynomialOverFixedRing</a> : <span class="keyword">private</span> <a class="code" href="class_polynomial_over.html">PolynomialOver</a><T>00160 {00161 <span class="keyword">typedef</span> <a class="code" href="class_polynomial_over.html">PolynomialOver<T></a> <a class="code" href="class_polynomial_over.html">B</a>;00162 <span class="keyword">typedef</span> <a class="code" href="class_polynomial_over_fixed_ring.html">PolynomialOverFixedRing<T, instance></a> <a class="code" href="class_polynomial_over_fixed_ring.html">ThisType</a>;00163 00164 <span class="keyword">public</span>:00165 <span class="keyword">typedef</span> T Ring;00166 <span class="keyword">typedef</span> <span class="keyword">typename</span> T::Element CoefficientType;00167 <span class="keyword">typedef</span> B::DivideByZero DivideByZero;00168 <span class="keyword">typedef</span> B::RandomizationParameter RandomizationParameter;00169 <span class="comment"></span>00170 <span class="comment"> //! \name CREATORS</span>00171 <span class="comment"></span><span class="comment"> //@{</span>00172 <span class="comment"></span><span class="comment"> //! creates the zero polynomial</span><a name="l00173"></a><a class="code" href="class_polynomial_over_fixed_ring.html#_polynomial_over_fixed_ringz67_0">00173</a> <span class="comment"></span> <a class="code" href="class_polynomial_over_fixed_ring.html#_polynomial_over_fixed_ringz67_0">PolynomialOverFixedRing</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count = 0) : <a class="code" href="class_polynomial_over.html">B</a>(fixedRing, count) {}00174 <span class="comment"></span>00175 <span class="comment"> //! copy constructor</span><a name="l00176"></a><a class="code" href="class_polynomial_over_fixed_ring.html#_polynomial_over_fixed_ringz67_1">00176</a> <span class="comment"></span> <a class="code" href="class_polynomial_over_fixed_ring.html#_polynomial_over_fixed_ringz67_0">PolynomialOverFixedRing</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_over_fixed_ring.html">ThisType</a> &t) : <a class="code" href="class_polynomial_over.html">B</a>(t) {}00177 00178 <span class="keyword">explicit</span> <a class="code" href="class_polynomial_over_fixed_ring.html#_polynomial_over_fixed_ringz67_0">PolynomialOverFixedRing</a>(<span class="keyword">const</span> B &t) : B(t) {}00179 <span class="comment"></span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -