Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 23s
DP recurrence for popcount that avoids host bitwise operations: result[i] = result[i / 2] + (i mod 2) Drops the low bit (i / 2 stands in for i lsr 1) and adds it back if it was 1 (i mod 2 stands in for i land 1). sum over 0..100 of popcount(i) = 319 Tests pure-arithmetic popcount, accumulating ref + DP array, classic look-back to half-index pattern. 197 baseline programs total.
15 lines
236 B
OCaml
15 lines
236 B
OCaml
let count_bits n =
|
|
let result = Array.make (n + 1) 0 in
|
|
for i = 1 to n do
|
|
result.(i) <- result.(i / 2) + (i mod 2)
|
|
done;
|
|
let sum = ref 0 in
|
|
for i = 0 to n do
|
|
sum := !sum + result.(i)
|
|
done;
|
|
!sum
|
|
|
|
;;
|
|
|
|
count_bits 100
|