36 lines
		
	
	
		
			882 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			882 B
		
	
	
	
		
			Factor
		
	
	
IN: benchmark.nsieve-bytes
 | 
						|
USING: math math.parser sequences sequences.private kernel
 | 
						|
byte-arrays make io ;
 | 
						|
 | 
						|
: clear-flags ( step i seq -- )
 | 
						|
    2dup length >= [
 | 
						|
        3drop
 | 
						|
    ] [
 | 
						|
        0 2over set-nth-unsafe [ over + ] dip clear-flags
 | 
						|
    ] if ; inline recursive
 | 
						|
 | 
						|
: (nsieve) ( count i seq -- count )
 | 
						|
    2dup length < [
 | 
						|
        2dup nth-unsafe 0 > [
 | 
						|
            over dup 2 * pick clear-flags
 | 
						|
            rot 1 + -rot ! increment count
 | 
						|
        ] when [ 1 + ] dip (nsieve)
 | 
						|
    ] [
 | 
						|
        2drop
 | 
						|
    ] if ; inline recursive
 | 
						|
 | 
						|
: nsieve ( m -- count )
 | 
						|
    0 2 rot 1 + <byte-array> [ drop 1 ] map! (nsieve) ;
 | 
						|
 | 
						|
: nsieve. ( m -- )
 | 
						|
    [ "Primes up to " % dup # " " % nsieve # ] "" make print ;
 | 
						|
 | 
						|
: nsieve-main ( n -- )
 | 
						|
    dup 2^ 10000 * nsieve.
 | 
						|
    dup 1 - 2^ 10000 * nsieve.
 | 
						|
    2 - 2^ 10000 * nsieve. ;
 | 
						|
 | 
						|
: nsieve-bytes-benchmark ( -- ) 9 nsieve-main ;
 | 
						|
 | 
						|
MAIN: nsieve-bytes-benchmark
 |