diff options
Diffstat (limited to 'haskell/wip/012-highly_divisible_triangular_number.hs')
| -rw-r--r-- | haskell/wip/012-highly_divisible_triangular_number.hs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/haskell/wip/012-highly_divisible_triangular_number.hs b/haskell/wip/012-highly_divisible_triangular_number.hs new file mode 100644 index 0000000..ad621b0 --- /dev/null +++ b/haskell/wip/012-highly_divisible_triangular_number.hs @@ -0,0 +1,44 @@ +-- Highly divisible triangular number + +-- Problem 12 +-- The sequence of triangle numbers is generated by adding the natural numbers. +-- So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. +-- The first ten terms would be: + +-- 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... + +-- Let us list the factors of the first seven triangle numbers: + +-- 1: 1 +-- 3: 1,3 +-- 6: 1,2,3,6 +-- 10: 1,2,5,10 +-- 15: 1,3,5,15 +-- 21: 1,3,7,21 +-- 28: 1,2,4,7,14,28 +-- We can see that 28 is the first triangle number to have over five divisors. + +-- What is the value of the first triangle number to have over five hundred divisors? + + +main = do + print (trial_division 2 10) + print (find_triangular 1) + + +find_triangular :: Int -> Int +find_triangular n + | trial_division 2 nth_triangular > 100 = nth_triangular + | otherwise = find_triangular (n + 1) + where nth_triangular = (n * (n + 1)) `div` 2 + +trial_division :: Int -> Int -> Int +trial_division by x + | x == 0 || by > x = 2 + | x `mod` by == 0 = 1 + trial_division by (x `div` by) + | otherwise = trial_division (by + 1) x + +-- naive +-- triangulars :: Int -> [Int] +-- triangulars 0 = [] +-- triangulars i = sum [1..i] : triangulars (i - 1) |
