aboutsummaryrefslogtreecommitdiff
path: root/haskell/wip/012-highly_divisible_triangular_number.hs
diff options
context:
space:
mode:
Diffstat (limited to 'haskell/wip/012-highly_divisible_triangular_number.hs')
-rw-r--r--haskell/wip/012-highly_divisible_triangular_number.hs44
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)