Info_10_fev_2023.ml 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. let curry f = function a-> (function b -> f (a,b));;
  2. let decurry f = function (a,b) -> f a b;;
  3. let u n =
  4. let u0 = ref 1.0 in
  5. for i = 0 to n do
  6. u0 := sin !u0
  7. done;
  8. !u0
  9. ;;
  10. let u = ref 1. and n = ref 0 in
  11. while !u > 0.0001 do
  12. u := sin !u;
  13. n := !n + 1
  14. done;
  15. !n;;
  16. let factoriter n =
  17. let k = ref 1 in
  18. for i = 2 to n do
  19. k := !k * i
  20. done;
  21. !k;;
  22. let puissance x n = let p = ref 1 in
  23. for i = 1 to n do
  24. p := !p * x
  25. done;
  26. !p;;
  27. let sum m n = let s = ref 0. and c = ref 0. in
  28. for i = m to n do
  29. c := !c +. 1.;
  30. if i >= m then
  31. s := !s +. 1. /. !c
  32. done;
  33. !s
  34. ;;
  35. let pgcd a b = let c = ref a and d = ref b and e = ref 0 in
  36. while !c mod !d <> 0 do
  37. e := !c;
  38. c := !d;
  39. d := !e mod !d
  40. done;
  41. !d;;
  42. let valuation p n = let v = ref 0 and aux = ref n in
  43. while !aux mod p = 0 do
  44. v := !v +1;
  45. aux := !aux / p
  46. done;
  47. !v;;
  48. let maximum a = let max = ref a.(0) in
  49. for i = 0 to Array.length(a)-1 do
  50. if a.(i) > !max then
  51. max := a.(i)
  52. done;
  53. !max;;
  54. let mirroir t =
  55. let n = Array.length t in
  56. let u = Array.make n t.(0) in
  57. for i = 0 to n-1 do
  58. u.(i) <- t.(n-1-i)
  59. done;
  60. u;;
  61. let appartenance t x= let a = ref 0 and b = ref false in
  62. while t.(!a) <> x && !a< Array.length t do
  63. a := !a +1;
  64. done;
  65. if !a > 0 then
  66. b := true;
  67. !b
  68. ;;
  69. let appartprof t x = let n = Array.length t and i = ref 0 in
  70. while !i<n && x <> t.(!i) do
  71. i := !i+1
  72. done;
  73. !i<n;;
  74. let appartsenti t x = let n = Array.length t and i = ref 0 in
  75. let aux = t.(n-1) in
  76. t.(n-1) <- x;
  77. while x<> t.(!i) do
  78. i := !i+1
  79. done;
  80. (!i<(n-1) )||(x=aux );;
  81. let permut t = let n = Array.length t in
  82. let b = ref true in
  83. for i = 0 to n-1 do
  84. if t.(i)>=n || t.(0)<0 then
  85. b := false;
  86. for j=i+1 to n-1 do
  87. if t.(i)=t.(j) then
  88. b := false
  89. done;
  90. done;
  91. !b;;
  92. let f x = x*x;;
  93. let u u0 n = let un = ref u0 in
  94. for k= 0 to n do
  95. un := f !un
  96. done;
  97. !un;;
  98. let rec suite_rec u0 n =
  99. if n= 0 then
  100. u0
  101. else f (suite_rec u0 (n-1));;
  102. let factoiter n = let u = ref 1 in
  103. for k=1 to n do
  104. u := !u * k
  105. done;
  106. !u;;
  107. let rec factorecu n = match n with
  108. | 0 -> 1
  109. | _ -> n*factorecu (n-1);;
  110. let rec puissancerecu a n = match n with
  111. | 0 -> 1
  112. | _ -> a* puissancerecu a (n-1);;
  113. let puissanceiter a n = let b = ref 1 in
  114. for k=1 to n do
  115. b := !b * a
  116. done;
  117. !b;;
  118. let rec carrerecu b = match b with
  119. | 0 -> 0
  120. | _ -> carrerecu (b-1) + 2*b -1
  121. let rec sumpq p q = match q with
  122. | 0 -> p
  123. | _ -> sumpq (p+1) (q-1);;
  124. let rec productpq p q = match q with
  125. | 0 -> 0
  126. | _-> (productpq p (q-1))+q;;
  127. let rec minimumtab t =
  128. let n = Array.length t in
  129. if n=1 then
  130. t.(0)
  131. else
  132. let m = minimumtab (Array.sub t 1 (n-1)) in
  133. if t.(0)<m then
  134. t.(0)
  135. else
  136. m;;
  137. let rec minimumtabindice t =
  138. let n = Array.length t in
  139. if n=1 then
  140. 0
  141. else
  142. let m = 1+minimumtabindice (Array.sub t 1 (n-1)) in
  143. if t.(0)<t.(m) then
  144. 0
  145. else
  146. m;;
  147. let rec min2_aux t i =
  148. let n = Array.length t in
  149. if i =n-1 then
  150. i
  151. else
  152. let m = min2_aux t (i+1) in
  153. if t.(i)<t.(m) then
  154. i
  155. else
  156. m;;
  157. let min2 t = min2_aux t 0;;
  158. let rec minmax_aux t i =
  159. let n = Array.length t in
  160. if i =n-1 then
  161. (i,i)
  162. else
  163. let (m,o) = minmax_aux t (i+1) in
  164. match i with
  165. | i when t.(i)<t.(m) -> (i,o)
  166. | i when t.(i)>t.(o) -> (m,i)
  167. | _ -> (m,o);;
  168. let minmax t = minmax_aux t 0;;
  169. let rec productegypt p q = match q with
  170. | 0 -> 0
  171. | q when q mod 2 = 0 -> productegypt (2*p) (q/2)
  172. | _ ->p+ productegypt p (q-1);;
  173. let rec divisioneucli1 a b =
  174. if a<b then(0,a)
  175. else
  176. let q,r= divisioneucli1(a-b) b in
  177. (q+1,r);;
  178. let rec pgcd a b =
  179. if b = 0 then a
  180. else pgcd b (a mod b);;
  181. let rec pgcdprof a b =
  182. if a = b then a
  183. else let r = snd (divisioneucli1 a b) in
  184. pgcdprof b r;;
  185. let rec pgcd2prof a b = match (a,b) with
  186. | (a,0) -> a
  187. | (a,b) when a<b -> pgcd2prof b a
  188. | _ -> pgcd2prof (a-b) b;;
  189. let rec fib n =
  190. if n <= 0 then 0.
  191. else if n = 1 then 1.
  192. else fib (n-1) +. fib (n-2);;
  193. let rec coeffbinom n p = match (p,n) with
  194. | (0,n) -> 1
  195. | (p,n) when p = n-> 1
  196. | _ -> (coeffbinom (n-1) p) + (coeffbinom (n-1) (p-1));;
  197. let rec coeffbinom2duprof p n = match (p,n) with
  198. | (0,n) -> 1
  199. | _ -> (n* coeffbinom2duprof (p-1) (n-1))/(p);;