Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (* n! ~ n^n czyli O(log(n)) na policzenie silni i O(log(n)^2) na policzenie i stworzenie odpowiedzi *)
- (* Zlozość programu: obliczeniowa O(log^2(n)), pamięciowa O(log^2(n)) [Na składowanie odpowiedzi - bez tego O(1) *)
- let silnie n =
- let sum = ref n and
- res = ref [] and
- i = ref 1 and
- fac = ref 1 in
- while !fac < !sum do
- incr i;
- fac := !i * !fac
- done;
- while !sum > 0 do
- if fac <= sum then
- begin
- res := !i :: !res;
- sum := !sum - !fac
- end
- else
- begin
- fac := !fac / !i;
- decr i
- end;
- done;
- !res;;
- silnie 42;;
- silnie 69;;
- silnie 420;;
- silnie 2137;;
- silnie 119;; (* odpowiedz log^2(n) długa bo to n! -1 *)
- silnie 120;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement