Erathostene sieve
This commit is contained in:
@@ -28,6 +28,7 @@ library
|
|||||||
Primes.FermatPrimeTest
|
Primes.FermatPrimeTest
|
||||||
Primes.MillerRabin
|
Primes.MillerRabin
|
||||||
Primes.SolovayStrassen
|
Primes.SolovayStrassen
|
||||||
|
Primes.ErathosteneSieve
|
||||||
Factorization.FermatFactorization
|
Factorization.FermatFactorization
|
||||||
Factorization.PollardPminus1
|
Factorization.PollardPminus1
|
||||||
ModularSquareRoot.TonelliShanks
|
ModularSquareRoot.TonelliShanks
|
||||||
@@ -60,6 +61,7 @@ test-suite haskell-math-test
|
|||||||
other-modules:
|
other-modules:
|
||||||
GF2test
|
GF2test
|
||||||
TonelliShanksTest
|
TonelliShanksTest
|
||||||
|
ErathosteneSieveTest
|
||||||
build-depends:
|
build-depends:
|
||||||
base ^>=4.18.2.1,
|
base ^>=4.18.2.1,
|
||||||
haskell-math,
|
haskell-math,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
module Primes ( fermatPrimeTest, millerRabin, solovayStrassen) where
|
module Primes ( fermatPrimeTest, millerRabin, solovayStrassen, erathosteneSieve) where
|
||||||
|
|
||||||
import Primes.FermatPrimeTest
|
import Primes.FermatPrimeTest
|
||||||
import Primes.MillerRabin
|
import Primes.MillerRabin
|
||||||
import Primes.SolovayStrassen
|
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 GF2test (run)
|
||||||
import TonelliShanksTest (run)
|
import TonelliShanksTest (run)
|
||||||
|
import ErathosteneSieveTest (run)
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
putStrLn "Running all tests"
|
putStrLn "Running all tests"
|
||||||
GF2test.run
|
GF2test.run
|
||||||
TonelliShanksTest.run
|
TonelliShanksTest.run
|
||||||
|
ErathosteneSieveTest.run
|
||||||
putStrLn "All tests done."
|
putStrLn "All tests done."
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user