Skip to content
This repository was archived by the owner on May 22, 2026. It is now read-only.

Commit 8772e3b

Browse files
feat: just work
1 parent 12343e2 commit 8772e3b

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import Control.Monad (forM_, when)
2+
import Data.Vector.Unboxed qualified as VU
3+
import Data.Vector.Unboxed.Mutable qualified as VUM
4+
5+
type PrimeTable = VU.Vector Bool
6+
7+
primeTableToList :: PrimeTable -> [Int]
8+
primeTableToList t =
9+
[ i
10+
| i <- [0 .. VU.length t - 1],
11+
t VU.! i
12+
]
13+
14+
isInPrimeTable :: PrimeTable -> Int -> Bool
15+
isInPrimeTable t n
16+
| 0 <= n && n < VU.length t = t VU.! n
17+
| otherwise = error "out of range"
18+
19+
sieve :: Int -> PrimeTable
20+
sieve n = VU.create $ do
21+
vec <- VUM.replicate (n + 1) True
22+
VUM.write vec 0 False
23+
VUM.write vec 1 False
24+
forM_ [2 .. n] $ \i -> do
25+
b <- VUM.read vec i
26+
when b $ do
27+
forM_ [2 * i, 3 * i .. n] $ \j -> do
28+
VUM.write vec j False
29+
return vec
30+
31+
main = do
32+
let t = sieve 100
33+
print $ primeTableToList t
34+
35+
-- print $ take 20 primes
36+
-- print $ 7 `elem` primes
37+
38+
-- print $ 102 `elem` primes -- 素数でない数を探索すると止まらない

0 commit comments

Comments
 (0)