Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #21259
| Newsgroups | comp.lang.javascript |
|---|---|
| Date | 2013-09-11 00:36 -0700 |
| References | <6e464d33-47e4-41b8-bfda-19511de92915@googlegroups.com> <l0jgv8$g2u$1@news.albasani.net> <65457886-cbe5-4ba8-8d77-b1c212faf964@googlegroups.com> <0.ae14d9ee263097e10773.20130910224834BST.87mwnk2vrh.fsf@bsb.me.uk> |
| Message-ID | <c8df65e0-e61f-4df8-a02f-96ad2f9dfbfd@googlegroups.com> (permalink) |
| Subject | Re: Strawmans prime sieve/filter |
| From | jonas.thornvall@gmail.com |
Den tisdagen den 10:e september 2013 kl. 23:48:34 UTC+2 skrev Ben Bacarisse:
> jonas.thornvall@gmail.com writes:
>
>
>
> <snip>
>
> > So what is wrong with this code?
>
>
>
> It looks over-complex, and it's not a fast as the plain sieve, so I
>
> don't see the point of the complexity. Maybe it kicks in for much
>
> larger primes sets.
>
>
>
> <snip>
>
> > function sieve(max) {
>
> > var D = [], primes = [];
>
> > for (var q=2; q<max; q++) {
>
> > if (D[q]) {
>
> > for (var i=0; i<D[q].length; i++) {
>
> > var p = D[q][i];
>
> > if (D[p+q]) D[p+q].push(p);
>
> > else D[p+q]=[p];
>
> > }
>
> > delete D[q];
>
> > } else {
>
> > primes.push(q);
>
> > if (q*q<max) D[q*q]=[q];
>
> > }
>
> > }
>
> > return primes;
>
> > }
>
> <snip>
>
>
>
> The plain sieve of Eratosthenes goes like this:
>
>
>
> function sieve(max) {
>
> var comp = [], primes = [], cur_prime = 2;
>
> while (cur_prime < max) {
>
> primes.push(cur_prime);
>
> for (var mult = 2 * cur_prime; mult < max; mult += cur_prime)
>
> comp[mult] = true;
>
> while (comp[++cur_prime]);
>
> }
>
> return primes;
>
> }
>
>
>
> On my machine, this runs five times faster for primes up to 20,000,000.
>
>
>
> --
>
> Ben.
Hello Ben nice implementation, i do not know if i remember wrong but is this a new twist on Eratosthenes only storing the truth values? yours indeed was much faster then strawman, and i found an even faster implementation of Eratosthenes.
But i will try to match your speeds by setting just the index like you seem todo, i found your implementation a bit hard to understand could you explain?
Here is the timings from my computer yours, mine and Eratosthenes like i remembered it but it only uses index.
Barcaisse Timing=10779
Thörnvall Timing=29738
Ereastohenes Timing=6348
Code below.
<!DOCTYPE html>
<html>
<head></head>
<script type="text/javascript">
var MAX = 30000000;
function Eratosthenes()
{
// Eratosthenes algorithm to find all primes under n
var array = [], upperLimit = Math.sqrt(n), output = [];
// Make an array from 2 to (n - 1)
for (var i = 0; i < n; i ++ )
{
array.push(true);
}
// Remove multiples of primes starting from 2, 3, 5, ...
for (var i = 2; i <= upperLimit; i ++ )
{
if (array[i])
{
for (var j = i * i; j < n; j += i)
{
array[j] = false;
}
}
}
for (var i = 2; i < n; i ++ )
{
if(array[i])
{
output.push(i);
}
}
outE = output.toString();
}
function benB()
{
var comp = [], primes = [], cur_prime = 2;
while (cur_prime < MAX)
{
primes.push(cur_prime);
for (var mult = 2 * cur_prime; mult < MAX;
mult += cur_prime)
comp[mult] = true;
while (comp[ ++ cur_prime]);
}
outB = primes.toString();
return outB;
}
function jonasT()
{
var primes = [2];
n = 3;
while(n < MAX)
{
p = true;
k = 0;
test = Math.sqrt(n) + 1;
test = Math.round(test);
while (test >= primes[k])
{
if ((n % primes[k]) == 0)
{
p = false;
break;
document.write("break");
}
k ++ ;
}
if (p == true)
{
t = primes.length;
primes[t] = n;
}
n ++ ;
}
outJ = primes.toString();
return outJ;
}
var start = new Date().getTime();
benB();
var end = new Date().getTime();
var time = end - start;
outB=outB.substring(0,100);
document.write("Barcaisse=", outB, "<BR> Timing=", time, "<BR>");
var start = new Date().getTime();
jonasT();
var end = new Date().getTime();
var time = end - start;
outJ=outJ.substring(0,100);
document.write("<BR>Thörnvall=", outJ, "<BR> Timing=", time, "<BR>");
var start = new Date().getTime();
Eratosthenes(MAX);
var end = new Date().getTime();
var time = end - start;
outE=outE.substring(0,100);
document.write("<BR>Ereastohenes=",outE,"<BR> Timing=", time, "<BR>");
</script>
<body>
</body>
</html>
Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-08 19:09 -0700
Re: Strawmans prime sieve/filter Stefan Weiss <krewecherl@gmail.com> - 2013-09-09 05:57 +0200
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-08 21:22 -0700
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-08 21:50 -0700
Re: Strawmans prime sieve/filter Stefan Weiss <krewecherl@gmail.com> - 2013-09-09 13:45 +0200
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-09 06:33 -0700
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-09 06:41 -0700
Re: Strawmans prime sieve/filter Stefan Weiss <krewecherl@gmail.com> - 2013-09-09 18:37 +0200
Re: Strawmans prime sieve/filter Stefan Weiss <krewecherl@gmail.com> - 2013-09-09 19:54 +0200
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-09 12:46 -0700
Re: Strawmans prime sieve/filter Stefan Weiss <krewecherl@gmail.com> - 2013-09-09 23:25 +0200
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-09 14:58 -0700
Re: Strawmans prime sieve/filter Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-09-11 10:39 +0200
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-11 02:54 -0700
Re: Strawmans prime sieve/filter Stefan Weiss <krewecherl@gmail.com> - 2013-09-11 12:59 +0200
Re: Strawmans prime sieve/filter Dr J R Stockton <reply1300@merlyn.demon.co.uk.invalid> - 2013-09-12 20:17 +0100
Re: Strawmans prime sieve/filter Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-09-13 02:27 +0200
Re: Strawmans prime sieve/filter Stefan Weiss <krewecherl@gmail.com> - 2013-09-13 04:03 +0200
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-12 19:30 -0700
Re: Strawmans prime sieve/filter Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-09-13 05:15 +0200
Re: Strawmans prime sieve/filter Stefan Weiss <krewecherl@gmail.com> - 2013-09-13 05:27 +0200
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-13 08:26 -0700
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-13 08:15 -0700
Re: Strawmans prime sieve/filter Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-09-13 19:13 +0200
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-13 17:15 -0700
Re: Strawmans prime sieve/filter Ben Bacarisse <ben.usenet@bsb.me.uk> - 2013-09-14 01:55 +0100
Re: Strawmans prime sieve/filter Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-09-14 04:20 +0200
Re: Strawmans prime sieve/filter Ben Bacarisse <ben.usenet@bsb.me.uk> - 2013-09-14 06:16 +0100
Re: Strawmans prime sieve/filter Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-09-14 12:10 +0200
Re: Strawmans prime sieve/filter Ben Bacarisse <ben.usenet@bsb.me.uk> - 2013-09-14 12:49 +0100
Re: Strawmans prime sieve/filter Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-09-14 15:23 +0200
Re: Strawmans prime sieve/filter Ben Bacarisse <ben.usenet@bsb.me.uk> - 2013-09-14 21:51 +0100
Re: Strawmans prime sieve/filter Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-09-15 03:32 +0200
Re: Strawmans prime sieve/filter Ben Bacarisse <ben.usenet@bsb.me.uk> - 2013-09-15 04:07 +0100
Re: Strawmans prime sieve/filter Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-09-15 18:57 +0200
Re: Strawmans prime sieve/filter Ben Bacarisse <ben.usenet@bsb.me.uk> - 2013-09-15 19:24 +0100
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-14 20:37 -0700
Re: Strawmans prime sieve/filter Dr J R Stockton <reply1300@merlyn.demon.co.uk.invalid> - 2013-09-14 19:38 +0100
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-08 22:26 -0700
Re: Strawmans prime sieve/filter Ben Bacarisse <ben.usenet@bsb.me.uk> - 2013-09-10 22:48 +0100
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-11 00:36 -0700
Re: Strawmans prime sieve/filter Ben Bacarisse <ben.usenet@bsb.me.uk> - 2013-09-11 14:47 +0100
Re: Strawmans prime sieve/filter jonas.thornvall@gmail.com - 2013-09-08 22:33 -0700
Re: Strawmans prime sieve/filter "Chris M. Thomasson" <no@spam.invalid> - 2013-09-09 21:08 -0700
Re: Strawmans prime sieve/filter "Chris M. Thomasson" <no@spam.invalid> - 2013-09-10 08:52 -0700
Re: Strawmans prime sieve/filter Dr J R Stockton <reply1300@merlyn.demon.co.uk.invalid> - 2013-09-10 19:08 +0100
Re: Strawmans prime sieve/filter "Chris M. Thomasson" <no@spam.invalid> - 2014-04-10 22:02 -0700
Re: Strawmans prime sieve/filter "Chris M. Thomasson" <no@spam.invalid> - 2014-05-02 15:39 -0700
Re: Strawmans prime sieve/filter "Chris M. Thomasson" <no@spam.invalid> - 2014-05-02 15:54 -0700
csiph-web