35 lines
816 B
Text
35 lines
816 B
Text
_max = 1000000000
|
|
_size = _max/16 + 16
|
|
uint8 primes(_size)
|
|
|
|
local fn twins( max as uint64 )
|
|
CFTimeInterval t : t = fn CACurrentMediaTime
|
|
uint64 num, p, twins = 0, prev = 0
|
|
|
|
for num = 3 to max step 2
|
|
if primes(num >> 4) & bit((num & 15) >> 1) then continue
|
|
|
|
p = num * num
|
|
while p < max
|
|
primes(p >> 4) |= bit((p & 15) >> 1)
|
|
p += num << 1
|
|
wend
|
|
|
|
twins += (num == prev + 2)
|
|
prev = num
|
|
next
|
|
|
|
printf @"%10d twin primes in first %d integers %.3f ms."¬
|
|
, twins, max, 1000 * (fn CACurrentMediaTime - t)
|
|
end fn
|
|
|
|
window 1, @"Twin Primes"
|
|
print
|
|
CFTimeInterval tm : tm = fn CACurrentMediaTime
|
|
for byte x = 1 to 9
|
|
fn memset( @primes(0), 0, _size ) //Clear array for each run
|
|
fn twins( 10^x )
|
|
next
|
|
printf @" Total time: %.3f sec.",(fn CACurrentMediaTime - tm)
|
|
|
|
handleevents
|