Lattice sieving over the integers with arbitrary precision.
Includes the sampling algorithm described by [GPV08] and the Gauss Seive described in [MV10].
```rust use svp::{nvec, Lattice, KleinSampler, GaussSieve};
// LLL/BKZ reduced basis let mut b = vec![ nvec![-1, 0, 1, 0, 1, 0, 0, 0, -1, 1], nvec![-2, 2, -1, 0, 2, 3, 0, 1, 0, -2], nvec![-3, 1, -1, 1, 0, -4, -1, -2, 0, 0], nvec![1, 6, 0, 0, 1, 0, 2, 0, 0, 2], nvec![-2, 1, -4, -1, -1, 0, 0, 4, -3, 2], nvec![1, 0, -5, -10, 4, -3, -2, 0, 3, 4], nvec![5, 0, -4, 4, 6, -6, 0, 4, -9, -7], nvec![4, 3, -2, -7, -2, 3, 0, -6, -12, -2], nvec![1, 6, 0, 1, -3, 3, -15, 3, -1, 2], nvec![0, 3, 11, -9, -5, -4, -3, 8, -1, -7], ];
// Precompute norms for i in 0..b.len() { b[i].norm = Some(&b[i] * &b[i]); }
// Init lattice let l = Lattice { basis: b.clone() };
// Compute Gram-Schmidt matrix let gs = l.gso();
// Init sieve let mut s = GaussSieve { b: l, k: KleinSampler::init(&gs, (gs.len() as f64).ln()), l: vec![], s: b.clone(), };
// Start sieving let short_vecs = s.sieve(); ```