Erathostene sieve
This commit is contained in:
@@ -28,6 +28,7 @@ library
|
||||
Primes.FermatPrimeTest
|
||||
Primes.MillerRabin
|
||||
Primes.SolovayStrassen
|
||||
Primes.ErathosteneSieve
|
||||
Factorization.FermatFactorization
|
||||
Factorization.PollardPminus1
|
||||
ModularSquareRoot.TonelliShanks
|
||||
@@ -60,6 +61,7 @@ test-suite haskell-math-test
|
||||
other-modules:
|
||||
GF2test
|
||||
TonelliShanksTest
|
||||
ErathosteneSieveTest
|
||||
build-depends:
|
||||
base ^>=4.18.2.1,
|
||||
haskell-math,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
module Primes ( fermatPrimeTest, millerRabin, solovayStrassen) where
|
||||
module Primes ( fermatPrimeTest, millerRabin, solovayStrassen, erathosteneSieve) where
|
||||
|
||||
import Primes.FermatPrimeTest
|
||||
import Primes.MillerRabin
|
||||
import Primes.SolovayStrassen
|
||||
import Primes.ErathosteneSieve
|
||||
|
||||
11
src/Primes/ErathosteneSieve.hs
Normal file
11
src/Primes/ErathosteneSieve.hs
Normal file
@@ -0,0 +1,11 @@
|
||||
module Primes.ErathosteneSieve (erathosteneSieve) where
|
||||
|
||||
erathosteneSieve :: Integer -> [Integer]
|
||||
erathosteneSieve n
|
||||
| n < 2 = []
|
||||
| otherwise = sieve [2..n]
|
||||
where
|
||||
sieve (p:xs)
|
||||
| p * p > n = p : xs
|
||||
| otherwise = p : sieve [x | x <- xs, x `mod` p /= 0]
|
||||
sieve [] = []
|
||||
13
test/ErathosteneSieveTest.hs
Normal file
13
test/ErathosteneSieveTest.hs
Normal file
@@ -0,0 +1,13 @@
|
||||
module ErathosteneSieveTest (run) where
|
||||
|
||||
import Test.HUnit
|
||||
|
||||
import Primes (erathosteneSieve)
|
||||
|
||||
run :: IO ()
|
||||
run = do
|
||||
putStrLn "Erathostene sieve test"
|
||||
|
||||
assertEqual "Erathostene sieve n=30" (erathosteneSieve 30) [2,3,5,7,11,13,17,19,23,29]
|
||||
|
||||
putStrLn "Erathostene sieve test done."
|
||||
@@ -2,11 +2,13 @@ module Main (main) where
|
||||
|
||||
import GF2test (run)
|
||||
import TonelliShanksTest (run)
|
||||
import ErathosteneSieveTest (run)
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
putStrLn "Running all tests"
|
||||
GF2test.run
|
||||
TonelliShanksTest.run
|
||||
ErathosteneSieveTest.run
|
||||
putStrLn "All tests done."
|
||||
|
||||
|
||||
Reference in New Issue
Block a user