nx_factorial.nx source
↩ module page · 29 lines · 817 B
1// nx_factorial.nx -- n! for nx_int.
2//
3// genealogy_id: kramp_1808_factorial_notation
4// lineage_id: combinatorics
5// license: public_domain
6// complexity: O(n)
7
8// nx_safety_envelope:
9// intended_use: AUTO_APPLIED -- primitive-specific tuning queued
10// sil_target: SIL1
11// evidence: [bulk_applied_2026-05-16, see-file-comment-for-detail]
12// verdict: NOT_YET_EVALUATED
13
14import "nx_syscalls.nx"
15import "nx_tier.nx"
16
17// 20! = 2,432,902,008,176,640,000 fits in i64; 21! overflows.
18// Returns 0 for negative or > 20 (overflow guard).
19func nx_factorial(n: nx_int) -> nx_int {
20 if n < 0 { return 0 }
21 if n > 20 { return 0 }
22 var result: nx_int = 1
23 var i: nx_int = 2
24 while i <= n {
25 result = result * i
26 i = i + 1
27 }
28 return result
29}