///|
pub fn[N : HasOne + Compare + Add + Mul] factorial_naive(
n : N,
) -> N raise InvokeError {
guard n >= HasOne::one() else {
raise InvalidInput(msg="Factorial is only defined for n >= 1.")
}
let mut result = HasOne::one()
for i = HasOne::one(); i <= n; i = i + HasOne::one() {
result = result * i
}
result
}