> let rec factor_list (n, factor) =
- if n < factor * factor then [n]
- elif n % factor = 0 then factor::factor_list(n / factor, factor )
- else factor_list(n , factor + 1)
- ;;
val factor_list : int * int -> int list
> factor_list(13195, 2);;
val it : int list = [5; 7; 13; 29]
> factor_list(600851475143, 2);;
factor_list(600851475143, 2);;
------------^^^^^^^^^^^^
stdin(29,13): error FS1147: This number is outside the allowable range for 32-bit signed integers
> factor_list(600851475143L, 2);;
factor_list(600851475143L, 2);;
------------^^^^^^^^^^^^^
stdin(7,13): error FS0001: This expression was expected to have type
int
but here has type
int64
> let rec factor_list (n:int64, factor) =
- if n < factor * factor then [n]
- elif n % factor = 0 then factor::factor_list(n / factor, factor )
- else factor_list(n , factor + 1)
- ;;
elif n % factor = 0 then factor::factor_list(n / factor, factor )
-------------------------------------------^^^^^^
stdin(10,44): error FS0001: The type 'int' does not match the type 'int64'
> let rec factor_list (n:int64, factor:int64) =
- if n < factor * factor then [n]
- elif n % factor = 0 then factor::factor_list(n / factor, factor )
- else factor_list(n , factor + 1)
- ;;
elif n % factor = 0 then factor::factor_list(n / factor, factor )
----------------------^
stdin(15,23): error FS0001: This expression was expected to have type
int64
but here has type
int
> let rec factor_list (n:int64, factor:int64) =
- if n < factor * factor then [n]
- elif n % factor = 0L then factor::factor_list(n / factor, factor )
- else factor_list(n , factor + 1L)
- ;;
val factor_list : int64 * int64 -> int64 list
> factor_list(600851475143L, 2L);;
val it : int64 list = [71L; 839L; 1471L; 6857L]
>