Advertisement
Guest User

Untitled

a guest
Jan 17th, 2020
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.78 KB | None | 0 0
  1. (* n! ~ n^n czyli O(log(n)) na policzenie silni i O(log(n)^2) na policzenie i stworzenie odpowiedzi *)
  2. (* Zlozość programu: obliczeniowa O(log^2(n)), pamięciowa O(log^2(n)) [Na składowanie odpowiedzi - bez tego O(1) *)
  3. let silnie n =
  4.     let sum = ref n and
  5.     res = ref [] and
  6.     i = ref 1 and
  7.     fac = ref 1 in
  8.     while !fac < !sum do
  9.         incr i;
  10.         fac := !i * !fac
  11.     done;
  12.     while !sum > 0 do
  13.         if fac <= sum then
  14.         begin
  15.             res := !i :: !res;
  16.             sum := !sum - !fac
  17.         end
  18.         else
  19.         begin
  20.             fac := !fac / !i;
  21.             decr i
  22.         end;
  23.     done;
  24.     !res;;
  25.    
  26. silnie 42;;
  27. silnie 69;;
  28. silnie 420;;
  29. silnie 2137;;
  30. silnie 119;; (* odpowiedz log^2(n) długa bo to n! -1 *)
  31. silnie 120;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement