Если интеерсно - программка:
import List
all_bits max n = all [] max 0 n where
all hd max _ 0 = [hd]
all hd max i n | i == max = []
| otherwise = (all (i:hd) max (i+1) (n-1))++(all hd max (i+1) n)
min_p l = head [ p | p <- [length l..], (not . dups . sort . map (`mod` p)) l ] where
dups [] = False
dups [_] = False
dups (a:b:c) | a == b = True
| otherwise = dups (b:c)
mid l = sum (map (fromInteger . toInteger) l) / ((fromInteger . toInteger) (length l))
main = mapM_ putStrLn [ "N=" ++ show n ++ " k=" ++ show k ++
" p=" ++ ((show . mid . map min_p . sort) (all_bits n k))
| n <- [10, 20, 30], k <- [2..6] ]