From 3ffc76713f6db4c33f20588ce6896ea3c2bae2a7 Mon Sep 17 00:00:00 2001 From: Charles Date: Sat, 17 Aug 2019 21:39:43 +0200 Subject: wip directory for each language --- .../wip/012-highly_divisible_triangular_number.hs | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 haskell/wip/012-highly_divisible_triangular_number.hs (limited to 'haskell/wip/012-highly_divisible_triangular_number.hs') 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) -- cgit