📄 polynomi_8cpp-source.html
字号:
<a name="l00202"></a>00202 <a name="l00203"></a>00203 <span class="keyword">template</span> <<span class="keyword">class</span> T><a name="l00204"></a>00204 <span class="keywordtype">bool</span> <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T>::Equals</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a>& t, <span class="keyword">const</span> <a class="code" href="class_polynomial_over.html#f87a6be38193e61c7aecb8c96510583e">Ring</a> &ring)<span class="keyword"> const</span><a name="l00205"></a>00205 <span class="keyword"></span>{<a name="l00206"></a>00206 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count = <a class="code" href="class_polynomial_over.html#65c6004a42608f31008ff066f2eba3e2">CoefficientCount</a>(ring);<a name="l00207"></a>00207 <a name="l00208"></a>00208 <span class="keywordflow">if</span> (count != t.<a class="code" href="class_polynomial_over.html#65c6004a42608f31008ff066f2eba3e2">CoefficientCount</a>(ring))<a name="l00209"></a>00209 <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00210"></a>00210 <a name="l00211"></a>00211 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<count; i++)<a name="l00212"></a>00212 <span class="keywordflow">if</span> (!ring.Equal(m_coefficients[i], t.<a class="code" href="class_polynomial_over.html#d669c6670fb313273a4d245eeddb82dc">m_coefficients</a>[i]))<a name="l00213"></a>00213 <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00214"></a>00214 <a name="l00215"></a>00215 <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00216"></a>00216 }<a name="l00217"></a>00217 <a name="l00218"></a>00218 <span class="keyword">template</span> <<span class="keyword">class</span> T><a name="l00219"></a>00219 <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a> <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T>::Plus</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a>& t, <span class="keyword">const</span> <a class="code" href="class_polynomial_over.html#f87a6be38193e61c7aecb8c96510583e">Ring</a> &ring)<span class="keyword"> const</span><a name="l00220"></a>00220 <span class="keyword"></span>{<a name="l00221"></a>00221 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;<a name="l00222"></a>00222 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count = <a class="code" href="class_polynomial_over.html#65c6004a42608f31008ff066f2eba3e2">CoefficientCount</a>(ring);<a name="l00223"></a>00223 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tCount = t.<a class="code" href="class_polynomial_over.html#65c6004a42608f31008ff066f2eba3e2">CoefficientCount</a>(ring);<a name="l00224"></a>00224 <a name="l00225"></a>00225 <span class="keywordflow">if</span> (count > tCount)<a name="l00226"></a>00226 {<a name="l00227"></a>00227 <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a> result(ring, count);<a name="l00228"></a>00228 <a name="l00229"></a>00229 <span class="keywordflow">for</span> (i=0; i<tCount; i++)<a name="l00230"></a>00230 result.m_coefficients[i] = ring.Add(m_coefficients[i], t.<a class="code" href="class_polynomial_over.html#d669c6670fb313273a4d245eeddb82dc">m_coefficients</a>[i]);<a name="l00231"></a>00231 <span class="keywordflow">for</span> (; i<count; i++)<a name="l00232"></a>00232 result.m_coefficients[i] = m_coefficients[i];<a name="l00233"></a>00233 <a name="l00234"></a>00234 <span class="keywordflow">return</span> result;<a name="l00235"></a>00235 }<a name="l00236"></a>00236 <span class="keywordflow">else</span><a name="l00237"></a>00237 {<a name="l00238"></a>00238 <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a> result(ring, tCount);<a name="l00239"></a>00239 <a name="l00240"></a>00240 <span class="keywordflow">for</span> (i=0; i<count; i++)<a name="l00241"></a>00241 result.m_coefficients[i] = ring.Add(m_coefficients[i], t.<a class="code" href="class_polynomial_over.html#d669c6670fb313273a4d245eeddb82dc">m_coefficients</a>[i]);<a name="l00242"></a>00242 <span class="keywordflow">for</span> (; i<tCount; i++)<a name="l00243"></a>00243 result.m_coefficients[i] = t.<a class="code" href="class_polynomial_over.html#d669c6670fb313273a4d245eeddb82dc">m_coefficients</a>[i];<a name="l00244"></a>00244 <a name="l00245"></a>00245 <span class="keywordflow">return</span> result;<a name="l00246"></a>00246 }<a name="l00247"></a>00247 }<a name="l00248"></a>00248 <a name="l00249"></a>00249 <span class="keyword">template</span> <<span class="keyword">class</span> T><a name="l00250"></a>00250 <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a> <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T>::Minus</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a>& t, <span class="keyword">const</span> <a class="code" href="class_polynomial_over.html#f87a6be38193e61c7aecb8c96510583e">Ring</a> &ring)<span class="keyword"> const</span><a name="l00251"></a>00251 <span class="keyword"></span>{<a name="l00252"></a>00252 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;<a name="l00253"></a>00253 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count = <a class="code" href="class_polynomial_over.html#65c6004a42608f31008ff066f2eba3e2">CoefficientCount</a>(ring);<a name="l00254"></a>00254 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tCount = t.CoefficientCount(ring);<a name="l00255"></a>00255 <a name="l00256"></a>00256 <span class="keywordflow">if</span> (count > tCount)<a name="l00257"></a>00257 {<a name="l00258"></a>00258 <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a> result(ring, count);<a name="l00259"></a>00259 <a name="l00260"></a>00260 <span class="keywordflow">for</span> (i=0; i<tCount; i++)<a name="l00261"></a>00261 result.m_coefficients[i] = ring.Subtract(m_coefficients[i], t.m_coefficients[i]);<a name="l00262"></a>00262 <span class="keywordflow">for</span> (; i<count; i++)<a name="l00263"></a>00263 result.m_coefficients[i] = m_coefficients[i];<a name="l00264"></a>00264 <a name="l00265"></a>00265 <span class="keywordflow">return</span> result;<a name="l00266"></a>00266 }<a name="l00267"></a>00267 <span class="keywordflow">else</span><a name="l00268"></a>00268 {<a name="l00269"></a>00269 <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a> result(ring, tCount);<a name="l00270"></a>00270 <a name="l00271"></a>00271 <span class="keywordflow">for</span> (i=0; i<count; i++)<a name="l00272"></a>00272 result.m_coefficients[i] = ring.Subtract(m_coefficients[i], t.m_coefficients[i]);<a name="l00273"></a>00273 <span class="keywordflow">for</span> (; i<tCount; i++)<a name="l00274"></a>00274 result.m_coefficients[i] = ring.Inverse(t.m_coefficients[i]);<a name="l00275"></a>00275 <a name="l00276"></a>00276 <span class="keywordflow">return</span> result;<a name="l00277"></a>00277 }<a name="l00278"></a>00278 }<a name="l00279"></a>00279 <a name="l00280"></a>00280 <span class="keyword">template</span> <<span class="keyword">class</span> T><a name="l00281"></a><a class="code" href="class_polynomial_over.html#037a72b82d5acfcacbb94a73784b0d85">00281</a> <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a> <a class="code" href="class_polynomial_over.html#037a72b82d5acfcacbb94a73784b0d85">PolynomialOver<T>::Inverse</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html#f87a6be38193e61c7aecb8c96510583e">Ring</a> &ring)<span class="keyword"> const</span><a name="l00282"></a>00282 <span class="keyword"></span>{<a name="l00283"></a>00283 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count = <a class="code" href="class_polynomial_over.html#65c6004a42608f31008ff066f2eba3e2">CoefficientCount</a>(ring);<a name="l00284"></a>00284 <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a> result(ring, count);<a name="l00285"></a>00285 <a name="l00286"></a>00286 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<count; i++)<a name="l00287"></a>00287 result.<a class="code" href="class_polynomial_over.html#d669c6670fb313273a4d245eeddb82dc">m_coefficients</a>[i] = ring.Inverse(m_coefficients[i]);<a name="l00288"></a>00288 <a name="l00289"></a>00289 <span class="keywordflow">return</span> result;<a name="l00290"></a>00290 }<a name="l00291"></a>00291 <a name="l00292"></a>00292 <span class="keyword">template</span> <<span class="keyword">class</span> T><a name="l00293"></a>00293 <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a> <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T>::Times</a>(<span class="keyword">const</span> <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a>& t, <span class="keyword">const</span> <a class="code" href="class_polynomial_over.html#f87a6be38193e61c7aecb8c96510583e">Ring</a> &ring)<span class="keyword"> const</span><a name="l00294"></a>00294 <span class="keyword"></span>{<a name="l00295"></a>00295 <span class="keywordflow">if</span> (<a class="code" href="class_polynomial_over.html#de0983f77089c32d1f7ce07738ea4619">IsZero</a>(ring) || t.<a class="code" href="class_polynomial_over.html#de0983f77089c32d1f7ce07738ea4619">IsZero</a>(ring))<a name="l00296"></a>00296 <span class="keywordflow">return</span> <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T></a>();<a name="l00297"></a>00297 <a name="l00298"></a>00298 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count1 = <a class="code" href="class_polynomial_over.html#65c6004a42608f31008ff066f2eba3e2">CoefficientCount</a>(ring), count2 = t.<a class="code" href="class_polynomial_over.html#65c6004a42608f31008ff066f2eba3e2">CoefficientCount</a>(ring);<a name="l00299"></a>00299 PolynomialOver<T> result(ring, count1 + count2 - 1);<a name="l00300"></a>00300 <a name="l00301"></a>00301 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<count1; i++)<a name="l00302"></a>00302 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j=0; j<count2; j++)<a name="l00303"></a>00303 ring.Accumulate(result.m_coefficients[i+j], ring.Multiply(m_coefficients[i], t.<a class="code" href="class_polynomial_over.html#d669c6670fb313273a4d245eeddb82dc">m_coefficients</a>[j]));<a name="l00304"></a>00304 <a name="l00305"></a>00305 <span class="keywordflow">return</span> result;<a name="l00306"></a>00306 }<a name="l00307"></a>00307 <a name="l00308"></a>00308 <span class="keyword">template</span> <<span class="keyword">class</span> T><a name="l00309"></a>00309 PolynomialOver<T> <a class="code" href="class_polynomial_over.html" title="represents single-variable polynomials over arbitrary rings">PolynomialOver<T>::DividedBy</a>(<span class="keyword">const</span> PolynomialOver<T>& t, <span class="keyword">const</span> <a class="code" href="class_polynomial_over.html#f87a6be38193e61c7aecb8c96510583e">Ring</a> &ring)<span class="keyword"> const</span><a name="l00310"></a>00310 <span class="keyword"></span>{<a name="l00311"></a>00311 PolynomialOver<T> remainder, quotient;<a name="l00312"></a>00312 <a class="code" href="class_polynomial_over.html#e4e0b0beb7bfab492d6f7343630c2df9" title="calculate r and q such that (a == d*q + r) && (0 <= degree of r < degree...">Divide</a>(remainder, quotient, *<span class="keyword">this</span>, t, ring);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -