nx_pow_mod_test.nx source
↩ module page · 22 lines · 990 B
1import "nx_syscalls.nx"
2import "nx_pow_mod.nx"
3
4func main() -> nx_int {
5 // 2^10 = 1024 mod 1000 = 24
6 if nx_pow_mod(2, 10, 1000) != 24 { return __syscall(93, 1, 0, 0, 0, 0, 0) }
7 // 3^7 = 2187 mod 100 = 87
8 if nx_pow_mod(3, 7, 100) != 87 { return __syscall(93, 2, 0, 0, 0, 0, 0) }
9 // 5^0 = 1
10 if nx_pow_mod(5, 0, 7) != 1 { return __syscall(93, 3, 0, 0, 0, 0, 0) }
11 // 7^1 mod 5 = 2
12 if nx_pow_mod(7, 1, 5) != 2 { return __syscall(93, 4, 0, 0, 0, 0, 0) }
13 // 2^20 = 1048576 mod 1000000007 = 1048576
14 if nx_pow_mod(2, 20, 1000000007) != 1048576 { return __syscall(93, 5, 0, 0, 0, 0, 0) }
15 // Fermat: 2^(p-1) mod p == 1 for prime p=13
16 if nx_pow_mod(2, 12, 13) != 1 { return __syscall(93, 6, 0, 0, 0, 0, 0) }
17 // m == 1 -> always 0
18 if nx_pow_mod(123, 456, 1) != 0 { return __syscall(93, 7, 0, 0, 0, 0, 0) }
19 // m == 0 -> defensive 0
20 if nx_pow_mod(3, 4, 0) != 0 { return __syscall(93, 8, 0, 0, 0, 0, 0) }
21 return 0
22}