| 1 | {-# LANGUAGE BangPatterns #-} |
|---|
| 2 | module Main where |
|---|
| 3 | |
|---|
| 4 | import Data.List |
|---|
| 5 | import System.Environment |
|---|
| 6 | |
|---|
| 7 | sum' xs = foldl' (+) 0 xs |
|---|
| 8 | |
|---|
| 9 | sumf_meshes f a b w0 = (s0, w0) : go s0 w0 where |
|---|
| 10 | s0 = sum' . map f . takeWhile (<= b) $ [a + k*w0 | k <- map fromIntegral [0..]] |
|---|
| 11 | go s w = (s', w') : go s' w' where |
|---|
| 12 | s' = (+s) . sum' . map f . takeWhile (<= b) $ [a + w' + k*w | k <- map fromIntegral [0..]] |
|---|
| 13 | w' = w/2 |
|---|
| 14 | |
|---|
| 15 | main = do |
|---|
| 16 | str:_ <- getArgs |
|---|
| 17 | let n = read str |
|---|
| 18 | f u = (exp . negate $ u ) / u |
|---|
| 19 | mapM_ print . take n $ sumf_meshes f 1 23 22 |
|---|
| 20 | return () |
|---|