' 6 wheel sieve.bas for QB64 fork (B+=MGA) 2017-08-30 copy and trans to QB64
'translated from: First Factors.bas for SmallBASIC 11/27/14 (bpf.org post)
'topN = 1000000, primes 78,498, .17 secs, 8169 twins last 999959, 999961
'topN = 10000000, primes 664,579, 1.85 secs, 58,980 twins last 9999971, 9999973
'topN = 100000000, primes 5,761,455, 20.69 secs, 440,312 twins last 99999587, 99999589
' out of memory for 1 billion
'compare to 30 wheel
'topN = 1000000, primes 78,498, .15 secs, 8169 twins last 999959, 999961
'topN = 10000000, primes 664,579, 1.81 secs, 58,980 twins last 9999971, 9999973
'topN = 100000000, primes 5,761,455, 19.65 secs, 440,312 twins last 99999587, 99999589
' out of memory for 1 billion
'compare to 2310 wheel sieve WOW the 30 wheel is faster!
'QB64 results from 2310 wheel
'topN = 1000000, primes 78,498, .18 secs, 8169 twins last 999959, 999961
'topN = 10000000, primes 664,579, 1.98 secs, 58,980 twins last 9999971, 9999973
'topN = 100000000, primes 5,761,455, 21.57 secs, 440,312 twins last 99999587, 99999589
' out of memory for 1 billion
topN = 1223 'first 200 primes test
topN = 200000
'First Factors array is 0 for prime number or contains the numbers lowest factor
ff(i + 2) = 2: ff(i + 3) = 3: ff(i + 4) = 2: ff(i + 6) = 2
ff(2) = 0: ff(3) = 0 'fix first 2 factors
If ff
(i
) = 0 Then ff
(i
) = pcand
'count primes
tTime# = tStop# - tStart#
Print "For "; topN;
" numbers there are "; p;
" primes in "; tTime#;
" secs."
If 0 Then ' <<<<< uncomment this as needed
'file twin primes data
lastp = -1
Print #1, Str$(lastp
) + ", " + Str$(i
) + " Middle/6 = " + Str$((i
- 1) / 6) + ": " + factors$
((i
- 1) / 6) tCount = tCount + 1
lastp = i
Print "Found "; tCount;
" Twin Primes in first "; topN;
" integers."
End If ' <<<<<<<<<<<<< uncomment this as needed
'test some factoring of numbers
factorMe = 10
Input "Enter a number to factor, 0 quits "; factorMe
f$ = ""
f$
= f$
+ Str$(ff
(n
)) + " " n = n / ff(n)