1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Copyright 2005-2008 Jean Privat <jean@pryen.org>
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
24 for x
in [0 .. narr
.length
[ do narr
[x
] = 0xFFu
8
27 fun [](pos
: Int): Bool do
29 return (narr
[pos
/ 8] & (1u8
<< (7 - pos
% 8))) != 0u8
32 fun []=(pos
: Int, val
: Bool) do
35 narr
[pos
/ 8] |= 1u8
<< (7 - pos
% 8)
37 narr
[pos
/ 8] &= 0xFFu
8 - (1u8
<< (7 - pos
% 8))
42 fun nsieve
(n
: Int): Int
45 var b_arrsz
= ((n
- 1).to_f
/ 8.0).ceil
.to_i
46 var bitarr
= new Bitarray(new CByteArray(b_arrsz
))
48 # If self is already false, then no need to check for multiples
49 if not bitarr
[i
] then continue
63 print
("Primes up to {m} {nsieve(m)}")
67 if args
.length
== 1 then