diff --git a/Math/Ceil.ml b/Math/Ceil.ml new file mode 100644 index 0000000..81cdf02 --- /dev/null +++ b/Math/Ceil.ml @@ -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;; \ No newline at end of file diff --git a/Math/Euclidean gcd.ml b/Math/Euclidean gcd.ml new file mode 100644 index 0000000..41366db --- /dev/null +++ b/Math/Euclidean gcd.ml @@ -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);; \ No newline at end of file diff --git a/Math/Fibonacci Sequence Recursion.ml b/Math/Fibonacci Sequence Recursion.ml new file mode 100644 index 0000000..6cb81d4 --- /dev/null +++ b/Math/Fibonacci Sequence Recursion.ml @@ -0,0 +1,9 @@ +(*Recursive Fibonacci function*) + +let rec fib n = match n with + | 1 -> 1 + | 2 -> 1 + | _ -> fib (n - 1) + fib(n - 2);; + + + diff --git a/Math/Find max recursion.ml b/Math/Find max recursion.ml new file mode 100644 index 0000000..f4e4f0b --- /dev/null +++ b/Math/Find max recursion.ml @@ -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!";; \ No newline at end of file diff --git a/Math/Find min recursion.ml b/Math/Find min recursion.ml new file mode 100644 index 0000000..c1ed0e5 --- /dev/null +++ b/Math/Find min recursion.ml @@ -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!";; \ No newline at end of file diff --git a/Math/Sum of digits.ml b/Math/Sum of digits.ml new file mode 100644 index 0000000..6b64efc --- /dev/null +++ b/Math/Sum of digits.ml @@ -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);; diff --git a/Math/abs.ml b/Math/abs.ml new file mode 100644 index 0000000..5283060 --- /dev/null +++ b/Math/abs.ml @@ -0,0 +1,3 @@ +(* Absolute value *) + +let abs x = if x > 0 then x else -x;; diff --git a/Math/power-using-recursion.ml b/Math/power-using-recursion.ml new file mode 100644 index 0000000..cb755d2 --- /dev/null +++ b/Math/power-using-recursion.ml @@ -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.;; \ No newline at end of file diff --git a/project_euler/problem_001/sol1.ml b/project_euler/problem_001/sol1.ml new file mode 100644 index 0000000..26680d3 --- /dev/null +++ b/project_euler/problem_001/sol1.ml @@ -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);; + diff --git a/project_euler/problem_002/sol11.ml b/project_euler/problem_002/sol11.ml new file mode 100644 index 0000000..49388e8 --- /dev/null +++ b/project_euler/problem_002/sol11.ml @@ -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;; \ No newline at end of file diff --git a/project_euler/problem_003/sol1.ml b/project_euler/problem_003/sol1.ml new file mode 100644 index 0000000..ceee013 --- /dev/null +++ b/project_euler/problem_003/sol1.ml @@ -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 ;; \ No newline at end of file diff --git a/project_euler/problem_004/sol1.ml b/project_euler/problem_004/sol1.ml new file mode 100644 index 0000000..b3ca19a --- /dev/null +++ b/project_euler/problem_004/sol1.ml @@ -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;; diff --git a/project_euler/problem_005/sol1.ml b/project_euler/problem_005/sol1.ml new file mode 100644 index 0000000..103349a --- /dev/null +++ b/project_euler/problem_005/sol1.ml @@ -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;; \ No newline at end of file