⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algebra_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
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 &amp;r, Element &amp;q, <span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;d) <span class="keyword">const</span> =0;00144 00145         <span class="keyword">virtual</span> <span class="keyword">const</span> Element&amp; Mod(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;b) <span class="keyword">const</span> =0;00146         <span class="keyword">virtual</span> <span class="keyword">const</span> Element&amp; Gcd(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;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> &lt;<span class="keyword">class</span> T&gt; <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>&lt;T&gt;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 &amp;a, <span class="keyword">const</span> Element &amp;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&amp; 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&amp; Add(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;b)<span class="keyword"> const</span>00169 <span class="keyword">                </span>{<span class="keywordflow">return</span> result = a+b;}00170 00171         Element&amp; Accumulate(Element &amp;a, <span class="keyword">const</span> Element &amp;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&amp; Inverse(<span class="keyword">const</span> Element &amp;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&amp; Subtract(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;b)<span class="keyword"> const</span>00178 <span class="keyword">                </span>{<span class="keywordflow">return</span> result = a-b;}00179 00180         Element&amp; Reduce(Element &amp;a, <span class="keyword">const</span> Element &amp;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&amp; Double(<span class="keyword">const</span> Element &amp;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&amp; 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&amp; Multiply(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;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&amp; <a class="code" href="class_square.html">Square</a>(<span class="keyword">const</span> Element &amp;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 &amp;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&amp; MultiplicativeInverse(<span class="keyword">const</span> Element &amp;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&amp; Divide(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;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&amp; Mod(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;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 &amp;r, Element &amp;q, <span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;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> &lt;<span class="keyword">class</span> T&gt; <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>&lt;typename T::Element&gt;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 &amp;domain, <span class="keyword">const</span> Element &amp;modulus)00222                 : m_domain(domain), m_modulus(modulus) {}00223 00224         <span class="keyword">const</span> EuclideanDomain &amp; 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&amp; 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 &amp;a, <span class="keyword">const</span> Element &amp;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&amp; 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&amp; Add(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;b)<span class="keyword"> const</span>00237 <span class="keyword">                </span>{<span class="keywordflow">return</span> m_domain.Add(a, b);}00238 00239         Element&amp; Accumulate(Element &amp;a, <span class="keyword">const</span> Element &amp;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&amp; Inverse(<span class="keyword">const</span> Element &amp;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&amp; Subtract(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;b)<span class="keyword"> const</span>00246 <span class="keyword">                </span>{<span class="keywordflow">return</span> m_domain.Subtract(a, b);}00247 00248         Element&amp; Reduce(Element &amp;a, <span class="keyword">const</span> Element &amp;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&amp; Double(<span class="keyword">const</span> Element &amp;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 &amp;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&amp; 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&amp; Multiply(<span class="keyword">const</span> Element &amp;a, <span class="keyword">const</span> Element &amp;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&amp; <a class="code" href="class_square.html">Square</a>(<span class="keyword">const</span> Element &amp;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&amp; MultiplicativeInverse(<span class="keyword">const</span> Element &amp;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&lt;T&gt;</a> &amp;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 + -