#include <modular_int.hpp>
Definition at line 399 of file modular_int.hpp.
Definition at line 470 of file modular_int.hpp.
static void inv_mod | ( | C & | a, | |
const M & | m | |||
) | [inline, static] |
Definition at line 463 of file modular_int.hpp.
00463 { 00464 if (V::template maximum_size_helper<C>::value >= 8*sizeof(C)) 00465 inv_mod_unsigned(a, m.p); 00466 else 00467 inv_mod_signed(a, m.p); }
Definition at line 402 of file modular_int.hpp.
00402 { 00403 typedef typename unsigned_of_helper<C>::type uC; 00404 typedef typename signed_of_helper<C>::type sC; 00405 sC coa0=0, coa1=1, r0=p, r1=a, q, t; 00406 if ((p == 0) && (r1 != 0)) { 00407 q = (((uC) r0) - ((uC) r1)) / ((uC) r1) + 1; 00408 t = r0 - q * r1; 00409 r0 = r1; 00410 r1 = t; 00411 t = coa1; 00412 coa1 = coa0 - q * coa1; 00413 coa0 = t; 00414 } 00415 while (r1 != 0) { 00416 q = r0 / r1; 00417 t = r0 - q * r1; 00418 r0 = r1; 00419 r1 = t; 00420 t = coa1; 00421 coa1 = coa0 - q * coa1; 00422 coa0 = t; 00423 } 00424 if (r0 != 1) 00425 ERROR ("inv_mod: argument is not invertible"); 00426 a = coa0 < 0 ? p+coa0 : coa0; 00427 }
Definition at line 430 of file modular_int.hpp.
00430 { 00431 C coa0=0, coa1=1, r0=p, r1=a, q, t; 00432 bool toggle = true; 00433 if ((p == 0) && (r1 != 0)) { 00434 q = (r0-r1) / r1 + 1; 00435 t = r0 - q * r1; 00436 r0 = r1; 00437 r1 = t; 00438 t = coa1; 00439 coa1 = coa0 - q * coa1; 00440 coa0 = t; 00441 toggle = !toggle; 00442 } 00443 while (r1 != 0) { 00444 q = r0 / r1; 00445 t = r0 - q * r1; 00446 r0 = r1; 00447 r1 = t; 00448 t = coa1; 00449 coa1 = coa0 - q * coa1; 00450 coa0 = t; 00451 toggle = !toggle; 00452 } 00453 if (r0 != 1) 00454 ERROR ("inv_mod: argument is not invertible"); 00455 a = (toggle && (coa0 != 0)) ? p+coa0 : coa0; 00456 }
Definition at line 459 of file modular_int.hpp.