Title: First Factors
'First Factors MGA.BAS 10/19/14
'modified 10/24/14 with screen displays improvement a neat general code tip!
' for email to SmallBASIC crew
'I was challenged/inspired by the featured Primes.BAS code in SmallBASIC forum 10/18/14
'First Factors works from a different angle producing an array that is actually useful
'for finding more than just prime numbers. Use it to factor any number up to...
'topN, I left it at 1223 because that is the 200th prime found with Primes.BAS
'on my machine and system I get .002+ or .004+ secs for 200 primes but .02+ something with Primes.BAS
'of course I've gone up to 100,000 for TopN with .2+ secs results
'The algorithm is based on Sieve of Eratostheses,
'old as Greek Geometry with some prime number study added.
'Ha! looking up how to spell Sieve of Eratostheses I learn of Euler's Sieve (Wiki)
'n+1... there is always more that one can do, if one can do something!
'THANK YOU SmallBASIC crew and the Open Code Spirit - MGA
' This program code is a great first tool for Number Theory Study
' I think it's pretty good for teaching SmallBASIC as well
option base 1
'===================== topN =1223 for first 200 primes
'===================== topN =1000000 2.5+secs to load, 3.7+ to load and count
'In first FOR loop:
'you could go nuts performance wise and build patterns with 30 or 210 which are prime factorials
'here is just 6=2*3 which is an improvement on just 2 odds and evens.
'Prime factorials: 30=2*3*5 and 210=2*3*5*7... these create ever expanding and overlapping patterns
for i = 0 to topN step 6
ffa(2)=1:ffa(3)=1 'fix first two primes
for pcand=5 to testlimitN step 2
if ffA(pcand)=1 then
for i=pcand+pcand to topN step pcand
if ffA(i)=1 then ffA(i)=pcand : i=i+pcand 'booster shot .02 secs on 100,000
print topN; " First Factors Array Complete in ";(tic-tock)/tickspersec;" secs."
for i =2 to topN
if ffA(i)=1 then pcount =pcount +1
print "In first ";topN;" numbers there are ";pcount;" Primes."
print " In case a prime is not a prime until it is counted as one:"
? "It took "; (tic-tock)/tickspersec; " secs to load First Factor Array and count it's Primes."
Print" press any "
'the following demo's a neat way to display tons of screens of data or file
'and stop it where you want, great general programming tip!
for i=2 to topN
if ffa(i)=1 then
if frac(count/10)=0 then print
if frac(count/200)=0 then
?:Input " ** enter s to stop display, just enter to continue **";s
if ucase(s)="S" then exit
' now let's use our array for something useful besides prime numbers
? "Enter a number up to "+TopN+" to factor ( <2 to quit ) ";
if xn >= 2 and xn <=topN then
? xn; " factors are: ",
'I have learned with SmallBASIC we need to say when we are done
'because in SmallBASIC we can go back and look inside our code while
'the program is running, its nice feature but can mess you up if you
'forget the program is still running
?:? "That's all Folks!"
' now use this code to do your own number studies