Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Nim 0.86 KB | None | 0 0
  1. type BitSet = object
  2.   mem: int
  3. proc initBitSet(): BitSet = BitSet(mem:0)
  4. proc initBitSet[T](values: openArray[T]): BitSet =
  5.   for i in values:
  6.     result.add(i)
  7. proc contains[T](t: BitSet, val: T): bool = (t.mem and (1 shl val)) != 0
  8. proc add[T](t: var BitSet, val: T) = t.mem = t.mem or (1 shl val)
  9.  
  10. proc isPrime235*[T](n: T): bool =
  11.   const smalls = [2, 5, 3, 13, 17, 29, 7, 11, 19, 23, 27]
  12.   const smallsSet = initBitSet([2, 3, 5, 7, 11, 13, 17, 19, 23, 27, 29])
  13.   if n < 31:
  14.     return n in smallsSet
  15.   iterator factorCandidates(max: T): T =
  16.     for i in smalls:
  17.       yield i
  18.     for i in countup(30, max, 30):  # carefully
  19.       yield i + 1; yield i + 7
  20.       yield i + 11; yield i + 13
  21.       yield i + 17; yield i + 19
  22.       yield i + 23; yield i + 29
  23.   for i in factorCandidates(intSqrt(n)):
  24.     if n mod i == 0:
  25.       return false
  26.   return true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement