📄 algebra_8h-source.html
字号:
00140 <span class="keyword">public</span>:00141 <span class="keyword">typedef</span> T Element;00142 00143 <span class="keyword">virtual</span> <span class="keywordtype">void</span> DivisionAlgorithm(Element &r, Element &q, <span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &d) <span class="keyword">const</span> =0;00144 00145 <span class="keyword">virtual</span> <span class="keyword">const</span> Element& Mod(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b) <span class="keyword">const</span> =0;00146 <span class="keyword">virtual</span> <span class="keyword">const</span> Element& Gcd(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b) <span class="keyword">const</span>;00147 00148 <span class="keyword">protected</span>:00149 <span class="keyword">mutable</span> Element result;00150 };00151 00152 <span class="comment">// ********************************************************</span>00153 <span class="comment"></span>00154 <span class="comment">//! EuclideanDomainOf</span><a name="l00155"></a><a class="code" href="class_euclidean_domain_of.html">00155</a> <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">class </span><a class="code" href="class_euclidean_domain_of.html">EuclideanDomainOf</a> : <span class="keyword">public</span> <a class="code" href="class_abstract_euclidean_domain.html">AbstractEuclideanDomain</a><T>00156 {00157 <span class="keyword">public</span>:00158 <span class="keyword">typedef</span> T Element;00159 00160 <a class="code" href="class_euclidean_domain_of.html">EuclideanDomainOf</a>() {}00161 00162 <span class="keywordtype">bool</span> Equal(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00163 <span class="keyword"> </span>{<span class="keywordflow">return</span> a==b;}00164 00165 <span class="keyword">const</span> Element& Identity()<span class="keyword"> const</span>00166 <span class="keyword"> </span>{<span class="keywordflow">return</span> Element::Zero();}00167 00168 <span class="keyword">const</span> Element& Add(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00169 <span class="keyword"> </span>{<span class="keywordflow">return</span> result = a+b;}00170 00171 Element& Accumulate(Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00172 <span class="keyword"> </span>{<span class="keywordflow">return</span> a+=b;}00173 00174 <span class="keyword">const</span> Element& Inverse(<span class="keyword">const</span> Element &a)<span class="keyword"> const</span>00175 <span class="keyword"> </span>{<span class="keywordflow">return</span> result = -a;}00176 00177 <span class="keyword">const</span> Element& Subtract(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00178 <span class="keyword"> </span>{<span class="keywordflow">return</span> result = a-b;}00179 00180 Element& Reduce(Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00181 <span class="keyword"> </span>{<span class="keywordflow">return</span> a-=b;}00182 00183 <span class="keyword">const</span> Element& Double(<span class="keyword">const</span> Element &a)<span class="keyword"> const</span>00184 <span class="keyword"> </span>{<span class="keywordflow">return</span> result = a.Doubled();}00185 00186 <span class="keyword">const</span> Element& MultiplicativeIdentity()<span class="keyword"> const</span>00187 <span class="keyword"> </span>{<span class="keywordflow">return</span> Element::One();}00188 00189 <span class="keyword">const</span> Element& Multiply(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00190 <span class="keyword"> </span>{<span class="keywordflow">return</span> result = a*b;}00191 00192 <span class="keyword">const</span> Element& <a class="code" href="class_square.html">Square</a>(<span class="keyword">const</span> Element &a)<span class="keyword"> const</span>00193 <span class="keyword"> </span>{<span class="keywordflow">return</span> result = a.Squared();}00194 00195 <span class="keywordtype">bool</span> IsUnit(<span class="keyword">const</span> Element &a)<span class="keyword"> const</span>00196 <span class="keyword"> </span>{<span class="keywordflow">return</span> a.IsUnit();}00197 00198 <span class="keyword">const</span> Element& MultiplicativeInverse(<span class="keyword">const</span> Element &a)<span class="keyword"> const</span>00199 <span class="keyword"> </span>{<span class="keywordflow">return</span> result = a.MultiplicativeInverse();}00200 00201 <span class="keyword">const</span> Element& Divide(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00202 <span class="keyword"> </span>{<span class="keywordflow">return</span> result = a/b;}00203 00204 <span class="keyword">const</span> Element& Mod(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00205 <span class="keyword"> </span>{<span class="keywordflow">return</span> result = a%b;}00206 00207 <span class="keywordtype">void</span> DivisionAlgorithm(Element &r, Element &q, <span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &d)<span class="keyword"> const</span>00208 <span class="keyword"> </span>{Element::Divide(r, q, a, d);}00209 00210 <span class="keyword">private</span>:00211 <span class="keyword">mutable</span> Element result;00212 };00213 <span class="comment"></span>00214 <span class="comment">//! Quotient Ring</span><a name="l00215"></a><a class="code" href="class_quotient_ring.html">00215</a> <span class="comment"></span><span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">class </span><a class="code" href="class_quotient_ring.html">QuotientRing</a> : <span class="keyword">public</span> <a class="code" href="class_abstract_ring.html">AbstractRing</a><typename T::Element>00216 {00217 <span class="keyword">public</span>:00218 <span class="keyword">typedef</span> T EuclideanDomain;00219 <span class="keyword">typedef</span> <span class="keyword">typename</span> T::Element Element;00220 00221 <a class="code" href="class_quotient_ring.html">QuotientRing</a>(<span class="keyword">const</span> EuclideanDomain &domain, <span class="keyword">const</span> Element &modulus)00222 : m_domain(domain), m_modulus(modulus) {}00223 00224 <span class="keyword">const</span> EuclideanDomain & GetDomain()<span class="keyword"> const</span>00225 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_domain;}00226 00227 <span class="keyword">const</span> Element& GetModulus()<span class="keyword"> const</span>00228 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_modulus;}00229 00230 <span class="keywordtype">bool</span> Equal(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00231 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_domain.Equal(m_domain.Mod(m_domain.Subtract(a, b), m_modulus), m_domain.Identity());}00232 00233 <span class="keyword">const</span> Element& Identity()<span class="keyword"> const</span>00234 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_domain.Identity();}00235 00236 <span class="keyword">const</span> Element& Add(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00237 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_domain.Add(a, b);}00238 00239 Element& Accumulate(Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00240 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_domain.Accumulate(a, b);}00241 00242 <span class="keyword">const</span> Element& Inverse(<span class="keyword">const</span> Element &a)<span class="keyword"> const</span>00243 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_domain.Inverse(a);}00244 00245 <span class="keyword">const</span> Element& Subtract(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00246 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_domain.Subtract(a, b);}00247 00248 Element& Reduce(Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00249 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_domain.Reduce(a, b);}00250 00251 <span class="keyword">const</span> Element& Double(<span class="keyword">const</span> Element &a)<span class="keyword"> const</span>00252 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_domain.Double(a);}00253 00254 <span class="keywordtype">bool</span> IsUnit(<span class="keyword">const</span> Element &a)<span class="keyword"> const</span>00255 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_domain.IsUnit(m_domain.Gcd(a, m_modulus));}00256 00257 <span class="keyword">const</span> Element& MultiplicativeIdentity()<span class="keyword"> const</span>00258 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_domain.MultiplicativeIdentity();}00259 00260 <span class="keyword">const</span> Element& Multiply(<span class="keyword">const</span> Element &a, <span class="keyword">const</span> Element &b)<span class="keyword"> const</span>00261 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_domain.Mod(m_domain.Multiply(a, b), m_modulus);}00262 00263 <span class="keyword">const</span> Element& <a class="code" href="class_square.html">Square</a>(<span class="keyword">const</span> Element &a)<span class="keyword"> const</span>00264 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_domain.Mod(m_domain.Square(a), m_modulus);}00265 00266 <span class="keyword">const</span> Element& MultiplicativeInverse(<span class="keyword">const</span> Element &a) <span class="keyword">const</span>;00267 00268 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="class_quotient_ring.html">QuotientRing<T></a> &rhs)<span class="keyword"> const</span>00269 <span class="keyword"> </span>{<span class="keywordflow">return</span> m_modulus == rhs.<a class="code" href="class_quotient_ring.html#_quotient_ringp1">m_modulus</a>;}00270 00271 <span class="keyword">protected</span>:00272 EuclideanDomain m_domain;00273 Element m_modulus;00274 };00275 00276 NAMESPACE_END00277 00278 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:07 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -