Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type BitSet = object
- mem: int
- proc initBitSet(): BitSet = BitSet(mem:0)
- proc initBitSet[T](values: openArray[T]): BitSet =
- for i in values:
- result.add(i)
- proc contains[T](t: BitSet, val: T): bool = (t.mem and (1 shl val)) != 0
- proc add[T](t: var BitSet, val: T) = t.mem = t.mem or (1 shl val)
- proc isPrime235*[T](n: T): bool =
- const smalls = [2, 5, 3, 13, 17, 29, 7, 11, 19, 23, 27]
- const smallsSet = initBitSet([2, 3, 5, 7, 11, 13, 17, 19, 23, 27, 29])
- if n < 31:
- return n in smallsSet
- iterator factorCandidates(max: T): T =
- for i in smalls:
- yield i
- for i in countup(30, max, 30): # carefully
- yield i + 1; yield i + 7
- yield i + 11; yield i + 13
- yield i + 17; yield i + 19
- yield i + 23; yield i + 29
- for i in factorCandidates(intSqrt(n)):
- if n mod i == 0:
- return false
- return true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement