Prime numbers: using sets

module Main where
import IO

readNum :: IO Integer
readNum = readLn

- –  define divisors set:
divisors :: Integer -> [Integer]
divisors n = [m | m <- [1 .. n], n `mod` m == 0]

\mbox{divisors}\left(n\right)=\left\{m\in\{1..n\}| \mbox{where}\; n \mathop{\mathrm{mod}}\nolimits m=0 \right\}

- – In mathematics, “a prime number” (or “a prime”) is a natural number
– – which has exactly two distinct natural number divisors: 1 and itself
isPrime :: Integer -> Bool
isPrime 0 = False
isPrime 1 = False
isPrime n = (divisors n) == [1, n]

- – returns all Prime numbers from 0 to a by filtering Integer set
primes :: Integer -> [Integer]
primes a = filter isPrime [1 .. a]

main = do
hSetBuffering stdout NoBuffering
putStr “Enter A: ”
a <- readNum

print (primes a)

functional “FOR” loops

– functional FOR: a, b – interval set (Integer), f – “FOR”-internal block
for :: Integer->Integer->(Integer->IO())->IO()
for a b f = foldr ((>>).f) (return()) [a..b]

– functional FOR: a, b – interval set (Any type), f – “FOR”-internal block
for :: (Enum a, Monad m) => a -> a -> (a -> m b) -> m ()
for a b f = mapM_ f [a..b]

–using:
for 1 100 somekindofprocedure

functional FOR

- – functional FOR where: [a, b] – interval set, f – “FOR”-internal block:
for::Integer->Integer->(Integer->IO())->IO()
for a b f = foldr ((>>).f) (return()) [a..b]

- – printing prime numbers using functional FOR:
printRec2 a = do
for 1 a ch

- – printing prime numbers using recursion:
printRec a = do
if ( a > 1 )
then do
printRec (a-1)
ch a
else return()

- – procedure-printer:
ch a = do
if pr a
then putStr ( “The ” ++ show(a) ++ ” is a Prime number” ++ “\n” )
else return()

Full code: Read the rest of this entry »

Prime number cheking

module Main where
import IO

– function ost( A, B ) returns residue of division of A number by B number
ost :: Integer -> Integer -> Integer
ost a b | a >= b = ost (a-b) b
ost a b | a < b = a

– In mathematics, “a prime number” (or “a prime”) is a natural number
– which has exactly two distinct natural number divisors: 1 and itself
pr :: Integer -> Bool
pr 1 = False
pr 2 = True
pr n = dne n 2 (n-1)

–ned A B C == “There is no devisors of A at [B,C] segment”
dne :: Integer -> Integer -> Integer -> Bool
dne a b c | b == c = (ost a b /= 0)
dne a b c | b > c = True
dne a b c | b < c = (dne a b (c-1))&&(dne a c c)

readNum :: IO Integer
readNum = readLn

main = do
hSetBuffering stdout NoBuffering
putStr “Enter A: ”
a <- readNum

putStr (“The “++ show (a) ++ ” is a Prime number = ” ++ show (pr a) ++ “\n”)

residue of division

module Main where
import IO

– function ost(a,b) returns residue of division of A number by B number
ost :: Integer -> Integer -> Integer
ost a b | a >= b = ost (a-b) b
ost a b | a < b = a

readNum :: IO Integer
readNum = readLn

main = do
hSetBuffering stdout NoBuffering
putStr “Enter A: ”
a <- readNum
putStr “Enter B: ”
b <- readNum

putStr (“residue of division of the A number by the B number = ” ++ show (ost a b) ++ “\n”)

a -> a! (factorial with argument)

module Main where
import IO

fact :: Integer -> Integer
fact 0 = 1
fact n = n * fact (n – 1)

readNum :: IO Integer
readNum = readLn

main = do
hSetBuffering stdout NoBuffering
putStr “Enter a: ”
a <- readNum
putStr (“a! = ” ++ show (fact(a)) ++ “\n”)

a+b (integer)

module Main where
import IO

main = do
hSetBuffering stdout NoBuffering
putStr “Enter a: ”
x1 <- readNum
putStr “Enter b: ”
x2 <- readNum
putStr (“a + b = ” ++ show (x1+x2) ++ “\n”)
where readNum :: IO Integer

readNum = readLn

factorial example

module Main where

fact :: Integer -> Integer
fact 0 = 1
fact n = n * fact (n – 1)

main = print (fact 1000)

first program

1
2
3
4
5
module Main where
main = printRec 1
printRec 100000 = print 100000
printRec i = do print i
		printRec (i+1)