Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Math/Ceil.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
(* Ceil function *)

let ceil x =
if 2 - int_of_float x <= 0 then int_of_float(x)
else int_of_float(x) + 1;;
18 changes: 18 additions & 0 deletions Math/Euclidean gcd.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
(* Euclidean GCD*)

let euclidean_gcd a b =
let t = ref a in
let a = ref a in
let b = ref b in
while !b <> 0 do
t := !a;
a := !b;
b := !t mod !b;
done;
!a ;;


(* Euclidean GCD Recursive *)

let rec euclidean_gcd_recursive a b =
if b == 0 then a else euclidean_gcd_recursive b (a mod b);;
9 changes: 9 additions & 0 deletions Math/Fibonacci Sequence Recursion.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
(*Recursive Fibonacci function*)

let rec fib n = match n with
| 1 -> 1
| 2 -> 1
| _ -> fib (n - 1) + fib(n - 2);;



6 changes: 6 additions & 0 deletions Math/Find max recursion.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
(* Find max recursion *)

let rec find_max l = match l with
|[x] -> x
|t::q -> if t > (find_max q) then t else find_max q
|[] -> failwith "Liste vide!";;
6 changes: 6 additions & 0 deletions Math/Find min recursion.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
(* Find min recursion *)

let rec find_min l = match l with
|[x] -> x
|t::q -> if t < (find_min q) then t else find_min q
|[] -> failwith "Liste vide!";;
5 changes: 5 additions & 0 deletions Math/Sum of digits.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
(* Sum of digits *)

let rec sum_of_digits_recursion n =
let abs x = if x > 0 then x else -x in (* We need the absolute value of the number for the result to be positive) *)
if abs(n) < 10 then abs(n) else abs(n) mod 10 + sum_of_digits_recursion (n / 10);;
3 changes: 3 additions & 0 deletions Math/abs.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
(* Absolute value *)

let abs x = if x > 0 then x else -x;;
5 changes: 5 additions & 0 deletions Math/power-using-recursion.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
(* Power using recursion *)
(* power : float -> int -> float *)

let rec power base exponent =
if exponent <> 0 then base *. power base (exponent - 1) else 1.;;
9 changes: 9 additions & 0 deletions project_euler/problem_001/sol1.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
(* Project Euler - Problem 1 *)

let rec sum n = match n with
| 1 -> 0
| _ -> if n mod 3 = 0 || n mod 5 = 0 then n + sum (n - 1) else sum (n - 1)
;;

sum (1000 - 1);;

11 changes: 11 additions & 0 deletions project_euler/problem_002/sol11.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
(* Euler project - Problem 2 *)

let rec sum current previous max accu =
if current > max
then accu
else
if current mod 2 = 0
then sum (current + previous) current max (accu + current)
else sum (current + previous) current max accu;;

sum 2 1 4000000 0;;
16 changes: 16 additions & 0 deletions project_euler/problem_003/sol1.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
(* Euler Project - Problem 3 *)

let rec bigger_div n d =
if n mod d = 0 then n/d
else bigger_div n (d + 1);;

let is_composed n = bigger_div n 2 <> 1;;

let solution n =
let test = ref (bigger_div n 2) in
while is_composed !test do
test := bigger_div !test 2
done;
!test;;

solution 600851475143 ;;
22 changes: 22 additions & 0 deletions project_euler/problem_004/sol1.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
(* Euler Project - Problem 4 *)

let is_palindromic n =
let str_n = string_of_int n in
let len_n = 1 + int_of_float(log10(float_of_int n)) in
let rec palindrom_test = function
| i when i = len_n / 2 -> true
| i -> str_n.[i] = str_n.[len_n - i - 1] && palindrom_test (i + 1)
in palindrom_test 0;;

let solution =
let largest = ref 0 in
for a = 100 to 999 do
for b = 100 to 999 do
if is_palindromic (a * b) then
if (a * b) > !largest then largest := (a * b)
done
done;
!largest
;;

solution;;
15 changes: 15 additions & 0 deletions project_euler/problem_005/sol1.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
(* Euler Project - Problem 5 *)

let solution =
let solved = ref false in
let i = ref (20*19) in
while !solved = false do
solved := true;
for d = 2 to 20 do
if !i mod d <> 0 then solved := false
done;
if !solved = false then i := !i + (20*19)
done;
!i;;

solution;;