nx_modinv_test.nx source
↩ module page · 18 lines · 809 B
1import "nx_syscalls.nx"
2import "nx_modinv.nx"
3
4func main() -> nx_int {
5 // 3 * 5 = 15 = 1 (mod 7) -> inv(3, 7) = 5
6 if nx_modinv(3, 7) != 5 { return __syscall(93, 1, 0, 0, 0, 0, 0) }
7 // 7 * 8 = 56 = 1 (mod 11) -> inv(7, 11) = 8
8 if nx_modinv(7, 11) != 8 { return __syscall(93, 2, 0, 0, 0, 0, 0) }
9 // 2 has no inverse mod 4 (gcd is 2)
10 if nx_modinv(2, 4) != 0 { return __syscall(93, 3, 0, 0, 0, 0, 0) }
11 // 5 * 9 = 45 = 1 (mod 11) actually 45 = 44 + 1 = 4*11+1, so inv(5,11)=9
12 if nx_modinv(5, 11) != 9 { return __syscall(93, 4, 0, 0, 0, 0, 0) }
13 // inv(1, m) = 1 for any m > 1
14 if nx_modinv(1, 13) != 1 { return __syscall(93, 5, 0, 0, 0, 0, 0) }
15 // m = 1 is degenerate
16 if nx_modinv(3, 1) != 0 { return __syscall(93, 6, 0, 0, 0, 0, 0) }
17 return 0
18}