It's memory allocation. If you don't make the whole array and just break out of the loop early you can get it about 50x faster on my machine. Also I took the liberty of fixing a bug; you should check for <= sqrt(n).
function a() pl = [2] n = 3 ct = 1 while ct < 10001 isnprime = true for a in pl if n % a == 0 isnprime = false break end if a > sqrt(n) break end end if isnprime push!(pl,n) ct += 1 end n += 2 end return pl end On Monday, August 22, 2016 at 4:58:30 PM UTC-4, Achu wrote: > > I have a simple piece of code that finds me 10001 prime numbers. > > function a() > pl=[2] > n=3 > ct=1 > while(ct<10001) > isnprime=true > for a in pl > if n%a==0 > isnprime=false > break > end > end > if isnprime > push!(pl,n) > ct+=1 > end > n+=2 > end > return pl > end > > When I tweaked the code to check only prime factors less than the sqrt of > the number, it slowed it down by a factor of 3. > > function a() > pl=[2] > n=3 > ct=1 > while(ct<10001) > isnprime=true > for a in pl[pl.<sqrt(n)] > if n%a==0 > isnprime=false > break > end > end > if isnprime > push!(pl,n) > ct+=1 > end > n+=2 > end > return pl > end > > Why is that? > >