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

📄 algebra_8h-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<a name="l00136"></a>00136 <span class="comment"></span><a name="l00137"></a>00137 <span class="comment">//! Abstract Euclidean Domain</span><a name="l00138"></a><a class="code" href="class_abstract_euclidean_domain.html">00138</a> <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">class </span>CRYPTOPP_NO_VTABLE AbstractEuclideanDomain : <span class="keyword">public</span> <a class="code" href="class_abstract_ring.html" title="Abstract Ring.">AbstractRing</a>&lt;T&gt;<a name="l00139"></a>00139 {<a name="l00140"></a>00140 <span class="keyword">public</span>:<a name="l00141"></a><a class="code" href="class_abstract_euclidean_domain.html#02903b4c46289ca070e2e7668e532bdc">00141</a>         <span class="keyword">typedef</span> T Element;<a name="l00142"></a>00142 <a name="l00143"></a>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;<a name="l00144"></a>00144 <a name="l00145"></a>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;<a name="l00146"></a>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>;<a name="l00147"></a>00147 <a name="l00148"></a>00148 <span class="keyword">protected</span>:<a name="l00149"></a><a class="code" href="class_abstract_euclidean_domain.html#f1314f064e73c560b3d31982c4e26404">00149</a>         <span class="keyword">mutable</span> Element result;<a name="l00150"></a>00150 };<a name="l00151"></a>00151 <a name="l00152"></a>00152 <span class="comment">// ********************************************************</span><a name="l00153"></a>00153 <span class="comment"></span><a name="l00154"></a>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" title="EuclideanDomainOf.">EuclideanDomainOf</a> : <span class="keyword">public</span> AbstractEuclideanDomain&lt;T&gt;<a name="l00156"></a>00156 {<a name="l00157"></a>00157 <span class="keyword">public</span>:<a name="l00158"></a><a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">00158</a>         <span class="keyword">typedef</span> T <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>;<a name="l00159"></a>00159 <a name="l00160"></a><a class="code" href="class_euclidean_domain_of.html#ca20cf60ab8cd2c054cc2fac8c68bb36">00160</a>         <a class="code" href="class_euclidean_domain_of.html#ca20cf60ab8cd2c054cc2fac8c68bb36">EuclideanDomainOf</a>() {}<a name="l00161"></a>00161 <a name="l00162"></a><a class="code" href="class_euclidean_domain_of.html#59813252a0e0a490ea5a0420af5e9cc2">00162</a>         <span class="keywordtype">bool</span> <a class="code" href="class_euclidean_domain_of.html#59813252a0e0a490ea5a0420af5e9cc2">Equal</a>(<span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a, <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;b)<span class="keyword"> const</span><a name="l00163"></a>00163 <span class="keyword">                </span>{<span class="keywordflow">return</span> a==b;}<a name="l00164"></a>00164 <a name="l00165"></a><a class="code" href="class_euclidean_domain_of.html#6d35c27f3e48c24c4cb6f93275f5ed01">00165</a>         <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>&amp; <a class="code" href="class_euclidean_domain_of.html#6d35c27f3e48c24c4cb6f93275f5ed01">Identity</a>()<span class="keyword"> const</span><a name="l00166"></a>00166 <span class="keyword">                </span>{<span class="keywordflow">return</span> Element::Zero();}<a name="l00167"></a>00167 <a name="l00168"></a><a class="code" href="class_euclidean_domain_of.html#7112d4646dfb57a7437f0b04e605e653">00168</a>         <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>&amp; <a class="code" href="class_euclidean_domain_of.html#7112d4646dfb57a7437f0b04e605e653">Add</a>(<span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a, <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;b)<span class="keyword"> const</span><a name="l00169"></a>00169 <span class="keyword">                </span>{<span class="keywordflow">return</span> result = a+b;}<a name="l00170"></a>00170 <a name="l00171"></a><a class="code" href="class_euclidean_domain_of.html#9fa4103ff0b31f33b1f039383c9ab57c">00171</a>         <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>&amp; <a class="code" href="class_euclidean_domain_of.html#9fa4103ff0b31f33b1f039383c9ab57c">Accumulate</a>(<a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a, <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;b)<span class="keyword"> const</span><a name="l00172"></a>00172 <span class="keyword">                </span>{<span class="keywordflow">return</span> a+=b;}<a name="l00173"></a>00173 <a name="l00174"></a><a class="code" href="class_euclidean_domain_of.html#d78d5eeb2ec41658d48fdbf526af8fc3">00174</a>         <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>&amp; <a class="code" href="class_euclidean_domain_of.html#d78d5eeb2ec41658d48fdbf526af8fc3">Inverse</a>(<span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a)<span class="keyword"> const</span><a name="l00175"></a>00175 <span class="keyword">                </span>{<span class="keywordflow">return</span> result = -a;}<a name="l00176"></a>00176 <a name="l00177"></a><a class="code" href="class_euclidean_domain_of.html#c44bd3c9af42467bfdd822ef7046bc26">00177</a>         <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>&amp; <a class="code" href="class_euclidean_domain_of.html#c44bd3c9af42467bfdd822ef7046bc26">Subtract</a>(<span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a, <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;b)<span class="keyword"> const</span><a name="l00178"></a>00178 <span class="keyword">                </span>{<span class="keywordflow">return</span> result = a-b;}<a name="l00179"></a>00179 <a name="l00180"></a><a class="code" href="class_euclidean_domain_of.html#86e05235bbeaf1bb248f8354f3900d4b">00180</a>         <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>&amp; <a class="code" href="class_euclidean_domain_of.html#86e05235bbeaf1bb248f8354f3900d4b">Reduce</a>(<a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a, <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;b)<span class="keyword"> const</span><a name="l00181"></a>00181 <span class="keyword">                </span>{<span class="keywordflow">return</span> a-=b;}<a name="l00182"></a>00182 <a name="l00183"></a><a class="code" href="class_euclidean_domain_of.html#8c780e5c44eb5263e0115d02cd673725">00183</a>         <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>&amp; <a class="code" href="class_euclidean_domain_of.html#8c780e5c44eb5263e0115d02cd673725">Double</a>(<span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a)<span class="keyword"> const</span><a name="l00184"></a>00184 <span class="keyword">                </span>{<span class="keywordflow">return</span> result = a.Doubled();}<a name="l00185"></a>00185 <a name="l00186"></a><a class="code" href="class_euclidean_domain_of.html#8112935a4dd4996e011fef24b4d2564a">00186</a>         <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>&amp; <a class="code" href="class_euclidean_domain_of.html#8112935a4dd4996e011fef24b4d2564a">MultiplicativeIdentity</a>()<span class="keyword"> const</span><a name="l00187"></a>00187 <span class="keyword">                </span>{<span class="keywordflow">return</span> Element::One();}<a name="l00188"></a>00188 <a name="l00189"></a><a class="code" href="class_euclidean_domain_of.html#570d89c94098cfd66ac5e5e2faa81d1b">00189</a>         <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>&amp; <a class="code" href="class_euclidean_domain_of.html#570d89c94098cfd66ac5e5e2faa81d1b">Multiply</a>(<span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a, <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;b)<span class="keyword"> const</span><a name="l00190"></a>00190 <span class="keyword">                </span>{<span class="keywordflow">return</span> result = a*b;}<a name="l00191"></a>00191 <a name="l00192"></a><a class="code" href="class_euclidean_domain_of.html#bbca8e162fa458ea0c3298ec93bbc785">00192</a>         <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>&amp; <a class="code" href="class_euclidean_domain_of.html#bbca8e162fa458ea0c3298ec93bbc785">Square</a>(<span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a)<span class="keyword"> const</span><a name="l00193"></a>00193 <span class="keyword">                </span>{<span class="keywordflow">return</span> result = a.Squared();}<a name="l00194"></a>00194 <a name="l00195"></a><a class="code" href="class_euclidean_domain_of.html#cc11a9230a2d95b1f9bf7881abcfa58e">00195</a>         <span class="keywordtype">bool</span> <a class="code" href="class_euclidean_domain_of.html#cc11a9230a2d95b1f9bf7881abcfa58e">IsUnit</a>(<span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a)<span class="keyword"> const</span><a name="l00196"></a>00196 <span class="keyword">                </span>{<span class="keywordflow">return</span> a.IsUnit();}<a name="l00197"></a>00197 <a name="l00198"></a><a class="code" href="class_euclidean_domain_of.html#1799ba37ef6df348c1c03f26662a48dd">00198</a>         <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>&amp; <a class="code" href="class_euclidean_domain_of.html#1799ba37ef6df348c1c03f26662a48dd">MultiplicativeInverse</a>(<span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a)<span class="keyword"> const</span><a name="l00199"></a>00199 <span class="keyword">                </span>{<span class="keywordflow">return</span> result = a.MultiplicativeInverse();}<a name="l00200"></a>00200 <a name="l00201"></a><a class="code" href="class_euclidean_domain_of.html#52cd96d2233db782eb7c74d3645be28d">00201</a>         <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>&amp; <a class="code" href="class_euclidean_domain_of.html#52cd96d2233db782eb7c74d3645be28d">Divide</a>(<span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a, <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;b)<span class="keyword"> const</span><a name="l00202"></a>00202 <span class="keyword">                </span>{<span class="keywordflow">return</span> result = a/b;}<a name="l00203"></a>00203 <a name="l00204"></a><a class="code" href="class_euclidean_domain_of.html#f27cd160da0909dca14ffad646672695">00204</a>         <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a>&amp; <a class="code" href="class_euclidean_domain_of.html#f27cd160da0909dca14ffad646672695">Mod</a>(<span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a, <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;b)<span class="keyword"> const</span><a name="l00205"></a>00205 <span class="keyword">                </span>{<span class="keywordflow">return</span> result = a%b;}<a name="l00206"></a>00206 <a name="l00207"></a><a class="code" href="class_euclidean_domain_of.html#ffb95c21c906572aecf829451f73395c">00207</a>         <span class="keywordtype">void</span> <a class="code" href="class_euclidean_domain_of.html#ffb95c21c906572aecf829451f73395c">DivisionAlgorithm</a>(<a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;r, <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;q, <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;a, <span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html#a7ae3206185edccff8c2e7d56eb9d47b">Element</a> &amp;d)<span class="keyword"> const</span><a name="l00208"></a>00208 <span class="keyword">                </span>{Element::Divide(r, q, a, d);}<a name="l00209"></a>00209 <a name="l00210"></a><a class="code" href="class_euclidean_domain_of.html#c362f13502c9fcd46495e184088039fe">00210</a>         <span class="keywordtype">bool</span> <a class="code" href="class_euclidean_domain_of.html#c362f13502c9fcd46495e184088039fe">operator==</a>(<span class="keyword">const</span> <a class="code" href="class_euclidean_domain_of.html" title="EuclideanDomainOf.">EuclideanDomainOf&lt;T&gt;</a> &amp;rhs)<span class="keyword"> const</span><a name="l00211"></a>00211 <span class="keyword">                </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}<a name="l00212"></a>00212 <a name="l00213"></a>00213 <span class="keyword">private</span>:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -