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