poulpy/math/examples/main.rs
math/examples/main.rsRaw
1use math::dft::ntt::Table;
2use math::modulus::prime::Prime;
3use math::ring::Ring;
4
5fn main() {
6 // Example usage of `Prime<u64>`
7 let q_base: u64 = 65537; // Example prime base
8 let q_power: usize = 1; // Example power
9 let prime_instance: Prime<u64> = Prime::<u64>::new(q_base, q_power);
10
11 // Display the fields of `Prime` to verify
12 println!("Prime instance created:");
13 println!("q: {}", prime_instance.q());
14 println!("q_base: {}", prime_instance.q_base());
15 println!("q_power: {}", prime_instance.q_power());
16
17 let n: usize = 32;
18 let nth_root: usize = n << 1;
19
20 let ntt_table: Table<u64> = Table::<u64>::new(prime_instance, nth_root);
21
22 let mut a: Vec<u64> = vec![0; (nth_root >> 1) as usize];
23
24 for i in 0..a.len() {
25 a[i] = i as u64;
26 }
27
28 println!("{:?}", a);
29
30 ntt_table.forward_inplace::<false>(&mut a);
31
32 println!("{:?}", a);
33
34 ntt_table.backward_inplace::<false>(&mut a);
35
36 println!("{:?}", a);
37
38 let r: Ring<u64> = Ring::<u64>::new(n as usize, q_base, q_power);
39
40 let mut p0: math::poly::Poly<u64> = r.new_poly();
41 let mut p1: math::poly::Poly<u64> = r.new_poly();
42
43 for i in 0..p0.n() {
44 p0.0[i] = i as u64
45 }
46
47 r.automorphism::<false>(&p0, 2 * r.n - 1, nth_root, &mut p1);
48
49 println!("{:?}", p1);
50}