#include <crt_naive.hpp>
Definition at line 208 of file crt_naive.hpp.
typedef implementation<crt_transform,V> Crt |
Definition at line 214 of file crt_naive.hpp.
typedef S::modulus_base I |
Definition at line 210 of file crt_naive.hpp.
Definition at line 211 of file crt_naive.hpp.
Definition at line 212 of file crt_naive.hpp.
typedef implementation<vector_linear, vector_naive> Vec |
Definition at line 213 of file crt_naive.hpp.
crt_naive_transformer | ( | const vector< NV, VV > & | v, | |
bool | lazy = true | |||
) | [inline] |
Definition at line 254 of file crt_naive.hpp.
References mmx::C.
00255 : n(N(v)) { 00256 l_p= default_aligned_size<M> (n); 00257 l_m= default_aligned_size<I> (n); 00258 l_q= default_aligned_size<C> (n); 00259 p= mmx_formatted_new<M> (l_p, format<M> (/*FIXME*/)); 00260 for (nat i= 0; i < n; i++) p[i]= as<M> (v[i]); 00261 q= NULL; m= NULL; P= C(1); 00262 product_done= false; comoduli_done= false; inverse_done= false; 00263 if (! lazy) setup_inverse (); }
~crt_naive_transformer | ( | ) | [inline] |
Definition at line 288 of file crt_naive.hpp.
00288 { 00289 setup_comoduli (); 00290 Crt::combine (a, c, q, n); }
C comodulus | ( | nat | i | ) | [inline] |
Definition at line 280 of file crt_naive.hpp.
00280 { 00281 VERIFY (i < n, "index out of range"); 00282 setup_comoduli (); return q[i]; }
Definition at line 292 of file crt_naive.hpp.
M operator[] | ( | nat | i | ) | const [inline] |
Definition at line 270 of file crt_naive.hpp.
Modulus product | ( | ) | [inline] |
Definition at line 277 of file crt_naive.hpp.
00277 { 00278 setup_product (); return P; }
void setup_comoduli | ( | ) | [inline] |
Definition at line 232 of file crt_naive.hpp.
00232 { 00233 if (comoduli_done) return; 00234 setup_product (); 00235 for (nat i= 0; i < n; i++) q[i]= * P / * p[i]; 00236 comoduli_done= true; }
void setup_inverse | ( | ) | [inline] |
Definition at line 238 of file crt_naive.hpp.
References I, inv_mod(), mul_mod(), and reduce_mod().
00238 { 00239 if (inverse_done) return; 00240 setup_comoduli (); 00241 H= Crt::half (P); 00242 m= mmx_formatted_new<I> (l_m, format<I> (/*FIXME*/)); 00243 for (nat i= 0; i < n; i++) { 00244 I a (1), b; 00245 for (nat j= 0; j < n; j++) { 00246 reduce_mod (b, * p[j], p[i]); 00247 if (j != i) mul_mod (a, b, p[i]); 00248 } 00249 inv_mod (m[i], a, p[i]); 00250 ASSERT (m[i] != 0, "moduli must be pairwise coprime"); } 00251 inverse_done= true; }
void setup_product | ( | ) | [inline] |
Definition at line 225 of file crt_naive.hpp.
00225 { 00226 if (product_done) return; 00227 q= mmx_formatted_new<C> (l_q, format<C> (/*FIXME*/)); 00228 for (nat i= 0; i < n; i++) q[i]= * p[i]; 00229 P= Vec::template vec_unary_big<mul_op> (q, n); 00230 product_done= true; }
nat size | ( | ) | const [inline] |
bool comoduli_done |
Definition at line 223 of file crt_naive.hpp.
Definition at line 220 of file crt_naive.hpp.
Referenced by implementation< matrix_multiply, V, matrix_crt< W > >::mul().
bool inverse_done |
Definition at line 223 of file crt_naive.hpp.
nat l_m |
Definition at line 217 of file crt_naive.hpp.
nat l_p |
Definition at line 217 of file crt_naive.hpp.
nat l_q |
Definition at line 217 of file crt_naive.hpp.
Definition at line 222 of file crt_naive.hpp.
Referenced by implementation< matrix_multiply, V, matrix_crt< W > >::mul().
nat n |
Definition at line 216 of file crt_naive.hpp.
Definition at line 219 of file crt_naive.hpp.
Referenced by implementation< matrix_multiply, V, matrix_crt< W > >::mul().
Definition at line 218 of file crt_naive.hpp.
bool product_done |
Definition at line 223 of file crt_naive.hpp.
Definition at line 221 of file crt_naive.hpp.
Referenced by implementation< matrix_multiply, V, matrix_crt< W > >::mul().