Enough with the introductions! Let’s see some code!
-- Problem 31: Determine whether a given integer number is prime. -- Armed with our experience from Project Euler, this is not very daunting. -- We make sure n is not divided by any "candidates" up to sqrt(n). Which candidates? -- Well, the prime numbers, of course! Well, we're not gonna spend time tracking out the -- prime numbers in a primality test, though - we're going to use the P6 candidates; -- numbers of the form 6*n±1 : isprime :: (Integral a) => a -> Bool isprime n | n < 4 = n > 1 isprime n = all ((/=0) . mod n) $ takeWhile (<=m) candidates where candidates = (2:3:[x + i | x <- [6,12..], i <- [-1, 1]]) m = floor . sqrt $ fromIntegral n -- Problem 32: Determine the greatest common divisor of two positive integers. -- Enter Euclid: mygcd a 0 = abs a mygcd a b = mygcd b (a `mod` b) -- Problem 33: Determine whether two positive integer numbers are coprime. -- Straight from the definition of coprimality: coprime a b = gcd a b == 1 -- Problem 34: Calculate Euler's totient function. -- The definition makes it easy for us, again: phi n = length [m | m <- [1..n-1], coprime m n]
The rest of the solutions have more actual commentary, plus they’re in progress, so we’ll leave them for later. Cheers!« Past Future »