From 9b279bc5d029e329a1aa967d74c7797982f965ae Mon Sep 17 00:00:00 2001 From: SinTan1729 Date: Sun, 26 May 2024 01:13:00 -0500 Subject: [PATCH] new: Solved problems 31 to 41 --- Problems 31-41/problem_31.hs | 5 +++++ Problems 31-41/problem_32.hs | 7 +++++++ Problems 31-41/problem_33.hs | 10 ++++++++++ Problems 31-41/problem_34.hs | 13 +++++++++++++ Problems 31-41/problem_35.hs | 10 ++++++++++ Problems 31-41/problem_36.hs | 13 +++++++++++++ Problems 31-41/problem_37.hs | 16 ++++++++++++++++ Problems 31-41/problem_39.hs | 8 ++++++++ Problems 31-41/problem_40.hs | 16 ++++++++++++++++ Problems 31-41/problem_41.hs | 22 ++++++++++++++++++++++ 10 files changed, 120 insertions(+) create mode 100644 Problems 31-41/problem_31.hs create mode 100644 Problems 31-41/problem_32.hs create mode 100644 Problems 31-41/problem_33.hs create mode 100644 Problems 31-41/problem_34.hs create mode 100644 Problems 31-41/problem_35.hs create mode 100644 Problems 31-41/problem_36.hs create mode 100644 Problems 31-41/problem_37.hs create mode 100644 Problems 31-41/problem_39.hs create mode 100644 Problems 31-41/problem_40.hs create mode 100644 Problems 31-41/problem_41.hs diff --git a/Problems 31-41/problem_31.hs b/Problems 31-41/problem_31.hs new file mode 100644 index 0000000..d5e42b6 --- /dev/null +++ b/Problems 31-41/problem_31.hs @@ -0,0 +1,5 @@ +isqrt :: (Integral n) => n -> n +isqrt = floor . sqrt . fromIntegral + +isPrime :: (Integral n) => n -> Bool +isPrime n = (n >= 2) && all ((/= 0) . (n `mod`)) [2 .. isqrt n] diff --git a/Problems 31-41/problem_32.hs b/Problems 31-41/problem_32.hs new file mode 100644 index 0000000..d3ac3a4 --- /dev/null +++ b/Problems 31-41/problem_32.hs @@ -0,0 +1,7 @@ +myGCD :: (Integral n) => n -> n -> n +myGCD m n = + if remainder == 0 + then abs n + else myGCD n remainder + where + remainder = m `mod` n diff --git a/Problems 31-41/problem_33.hs b/Problems 31-41/problem_33.hs new file mode 100644 index 0000000..6b51ffe --- /dev/null +++ b/Problems 31-41/problem_33.hs @@ -0,0 +1,10 @@ +myGCD :: (Integral n) => n -> n -> n +myGCD m n = + if remainder == 0 + then abs n + else myGCD n remainder + where + remainder = m `mod` n + +coprime :: (Integral n) => n -> n -> Bool +coprime m n = myGCD m n == 1 diff --git a/Problems 31-41/problem_34.hs b/Problems 31-41/problem_34.hs new file mode 100644 index 0000000..52973ef --- /dev/null +++ b/Problems 31-41/problem_34.hs @@ -0,0 +1,13 @@ +myGCD :: (Integral n) => n -> n -> n +myGCD m n = + if remainder == 0 + then abs n + else myGCD n remainder + where + remainder = m `mod` n + +coprime :: (Integral n) => n -> n -> Bool +coprime m n = myGCD m n == 1 + +totient :: (Integral n) => n -> n +totient m = fromIntegral $ length $ filter (coprime m) [1 .. m - 1] diff --git a/Problems 31-41/problem_35.hs b/Problems 31-41/problem_35.hs new file mode 100644 index 0000000..109567e --- /dev/null +++ b/Problems 31-41/problem_35.hs @@ -0,0 +1,10 @@ +import Data.List (find) + +isqrt :: (Integral n) => n -> n +isqrt = floor . sqrt . fromIntegral + +primeFactors :: (Integral n) => n -> [n] +primeFactors n = + case find ((== 0) . (n `mod`)) [2 .. isqrt n] of + Nothing -> [n] + Just m -> m : primeFactors (n `div` m) diff --git a/Problems 31-41/problem_36.hs b/Problems 31-41/problem_36.hs new file mode 100644 index 0000000..5d322ae --- /dev/null +++ b/Problems 31-41/problem_36.hs @@ -0,0 +1,13 @@ +import Data.List (find, group) + +isqrt :: (Integral n) => n -> n +isqrt = floor . sqrt . fromIntegral + +primeFactors :: (Integral n) => n -> [n] +primeFactors n = + case find ((== 0) . (n `mod`)) [2 .. isqrt n] of + Nothing -> [n] + Just m -> m : primeFactors (n `div` m) + +primeFactorsMult :: (Integral n) => n -> [(n, n)] +primeFactorsMult = map (\g -> (head g, fromIntegral $ length g)) . group . primeFactors diff --git a/Problems 31-41/problem_37.hs b/Problems 31-41/problem_37.hs new file mode 100644 index 0000000..da3d01f --- /dev/null +++ b/Problems 31-41/problem_37.hs @@ -0,0 +1,16 @@ +import Data.List (find, group) + +isqrt :: (Integral n) => n -> n +isqrt = floor . sqrt . fromIntegral + +primeFactors :: (Integral n) => n -> [n] +primeFactors n = + case find ((== 0) . (n `mod`)) [2 .. isqrt n] of + Nothing -> [n] + Just m -> m : primeFactors (n `div` m) + +primeFactorsMult :: (Integral n) => n -> [(n, n)] +primeFactorsMult = map (\g -> (head g, fromIntegral $ length g)) . group . primeFactors + +phi :: (Integral n) => n -> n +phi = product . map (\(p, r) -> (p - 1) * p ^ (r - 1)) . primeFactorsMult diff --git a/Problems 31-41/problem_39.hs b/Problems 31-41/problem_39.hs new file mode 100644 index 0000000..c68abdd --- /dev/null +++ b/Problems 31-41/problem_39.hs @@ -0,0 +1,8 @@ +isqrt :: (Integral n) => n -> n +isqrt = floor . sqrt . fromIntegral + +isPrime :: (Integral n) => n -> Bool +isPrime n = (n >= 2) && all ((/= 0) . (n `mod`)) [2 .. isqrt n] + +primesR :: (Integral n) => n -> n -> [n] +primesR m n = filter isPrime [m .. n] diff --git a/Problems 31-41/problem_40.hs b/Problems 31-41/problem_40.hs new file mode 100644 index 0000000..8ea6c1d --- /dev/null +++ b/Problems 31-41/problem_40.hs @@ -0,0 +1,16 @@ +import Data.List (find) + +isqrt :: (Integral n) => n -> n +isqrt = floor . sqrt . fromIntegral + +isPrime :: (Integral n) => n -> Bool +isPrime n = (n >= 2) && all ((/= 0) . (n `mod`)) [2 .. isqrt n] + +goldbach :: (Integral n) => n -> (n, n) +goldbach n = + if odd n + then error "Odd number was given" + else (p, n - p) + where + Just p = find (\p -> (n - p) `elem` primes) primes + primes = filter isPrime [2 .. n - 1] diff --git a/Problems 31-41/problem_41.hs b/Problems 31-41/problem_41.hs new file mode 100644 index 0000000..6f3a5cc --- /dev/null +++ b/Problems 31-41/problem_41.hs @@ -0,0 +1,22 @@ +import Data.List (find) + +isqrt :: (Integral n) => n -> n +isqrt = floor . sqrt . fromIntegral + +isPrime :: (Integral n) => n -> Bool +isPrime n = (n >= 2) && all ((/= 0) . (n `mod`)) [2 .. isqrt n] + +goldbach :: (Integral n) => n -> (n, n) +goldbach n = + if odd n + then error "Odd number was given" + else (p, n - p) + where + Just p = find (\p -> (n - p) `elem` primes) primes + primes = filter isPrime [2 .. n - 1] + +goldbachList' :: (Integral n) => n -> n -> n -> [(n, n)] +goldbachList' m n d = filter (\(p, q) -> p > d && q > d) $ map goldbach $ filter even [m .. n] + +goldbachList :: (Integral n) => n -> n -> [(n, n)] +goldbachList m n = map goldbach $ filter even [m .. n]