mod_n_example.cpp

来自「矩阵运算源码最新版本」· C++ 代码 · 共 95 行

CPP
95
字号
#include <iostream>#include <libs/numeric/linear_algebra/test/mod_n.hpp>#include <libs/numeric/linear_algebra/test/algebraic_functions.hpp>int main(int, char* []){    using namespace mtl;    using namespace std;    typedef mod_n_t<unsigned, 5>    mod_5;    math::mult<mod_5>               mult_mod_5;    cout << "equal_results(mod_5(2), mod_5(3), mod_5(4), mod_5(4), mult_mod_5) "	 << equal_results(mod_5(2u), mod_5(3u), mod_5(4u), mod_5(4u), mult_mod_5) << endl;    cout << "algebraic_division(mod_5(4), mod_5(2), mult_mod_5) "	 << algebraic_division(mod_5(4u), mod_5(2u), mult_mod_5) << endl;     typedef mod_n_t<unsigned, 28>    mod_28;    math::mult<mod_28>               mult_mod_28;    math::add<mod_28>                add_mod_28;        cout << "1/3 " << math::inverse(mult_mod_28, mod_28(3)) 	 << " check " << math::inverse(mult_mod_28, mod_28(3)) * mod_28(3) << endl;    cout << "1/5 " << math::inverse(mult_mod_28, mod_28(5)) 	 << " check " << math::inverse(mult_mod_28, mod_28(5)) * mod_28(5) << endl;    cout << "1/9 " << math::inverse(mult_mod_28, mod_28(9)) 	 << " check " << math::inverse(mult_mod_28, mod_28(9)) * mod_28(9) << endl;    cout << "gcd(24, 28): " << gcd(24, 28) << endl;    cout << "gcd(25, 28): " << gcd(25, 28) << endl;        typedef mod_n_t<unsigned, 127>  mod_127;    math::mult<mod_127>             mult_mod_127;    math::add<mod_127>              add_mod_127;    mod_127   v78(78), v113(113), v90(90), v80(80);       cout << "equal_results(v78, v113,  v90, v80, mult_mod_127) "         << equal_results(v78, v113,  v90, v80, mult_mod_127) << endl;    cout << "equal_results(v78, v113,  v90, mod_127(81), mult_mod_127) "         << equal_results(v78, v113,  v90, mod_127(81), mult_mod_127) << endl;    cout << "identity_pair(v78, mod_127(-78), mult_mod_127) "         << identity_pair(v78, mod_127(-78), mult_mod_127) << endl;    cout << "identity_pair(v78, mod_127(57), mult_mod_127) "         << identity_pair(v78, mod_127(57), mult_mod_127) << endl;    cout << "algebraic_division(mod_127(8), mod_127(2), mult_mod_127) = log_2 (8) "         << algebraic_division(mod_127(8), mod_127(2), mult_mod_127) << endl;    cout << "algebraic_division(mod_127(35), v78, mult_mod_127) = log_78 (35) "         << algebraic_division(mod_127(35), v78, mult_mod_127) << endl;        cout << "multiply_and_square(v78, 8, mult_mod_127) = 78^8 "	 << multiply_and_square(v78, 8, mult_mod_127) << endl;    return 0;}#if 0concept_map AbelianGroup<math::add<mod_n_t<unsigned int, 127u> >, mod_n_t<unsigned int, 127u> > {}concept_map CommutativeSemiGroup<math::mult<mod_n_t<unsigned int, 127u> >, mod_n_t<unsigned int, 127u> > {}concept_map GenericField       < add< mod_n_t<unsigned, 127> >, 	 mult< mod_n_t<unsigned, 127> >, 	 mod_n_t<unsigned, 127>        > {    // Why do we need the typedefs???        typedef mod_n_t<unsigned, 127> inverse_result_type;    typedef mod_n_t<unsigned, 127> identity_result_type;    typedef bool          is_invertible_result_type;}#endif 

⌨️ 快捷键说明

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