{"id":1776,"date":"2006-09-03T00:58:00","date_gmt":"2006-09-03T07:58:00","guid":{"rendered":"http:\/\/www.sheer.us\/wordpress\/?p=1776"},"modified":"2006-09-03T00:58:00","modified_gmt":"2006-09-03T07:58:00","slug":"sql-database-of-primes","status":"publish","type":"post","link":"https:\/\/www.sheer.us\/weblogs\/uncategorized\/sql-database-of-primes","title":{"rendered":"SQL database of primes"},"content":{"rendered":"<p>So, I&#8217;m generating a SQL database of the first million primes as part of one of those random side tangents that I go off on occasionally. So far I&#8217;m up to half a million, and I&#8217;ve made several optimizations. I don&#8217;t know that my primefinder is actually valid, so I&#8217;m including it for you all to critique:<\/p>\n<p><lj-CUT TEXT=\"PrimeFinder src\"><\/p>\n<p>#!\/usr\/bin\/perl<\/p>\n<p># version: 0.06<br \/>\n$debug = 1;<\/p>\n<p>use DBI;<br \/>\nuse Time::Local;<\/p>\n<p>$dbh = DBI->connect(&#8220;dbi:mysql:db=primes&#8221;,undef,undef) || die &#8220;Failed to connect to database&#8221;;<\/p>\n<p>$SIG{INT} = \\&shutdown;<\/p>\n<p># first, locate our current position<\/p>\n<p>($current) = $dbh->selectrow_array(&#8220;SELECT loc FROM current_location&#8221;);<\/p>\n<p>$counter = $current;<\/p>\n<p>#$lastprime = 1;<\/p>\n<p>($lastprime) = $dbh->selectrow_array(&#8220;SELECT MAX(prime_number) FROM primes&#8221;);<\/p>\n<p>$counter = ($lastprime + 1) if($lastprime > $counter);<\/p>\n<p>while(1) {<\/p>\n<p>        if(is_prime($counter)) {<br \/>\n                $span = $counter &#8211; $lastprime;<br \/>\n                $lastprime = $counter;<br \/>\n                log_prime($counter, $span);<br \/>\n                print &#8220;$counter ($span)\\n&#8221; if($debug);<br \/>\n        }<\/p>\n<p>        if(! ($counter % 1000)) {<br \/>\n                $dbh->do(&#8220;UPDATE current_location SET loc = $counter, ts = now()&#8221;);<br \/>\n        }<\/p>\n<p>        $counter++;<\/p>\n<p>}<\/p>\n<p>sub is_prime {<\/p>\n<p>    my $number = shift;<\/p>\n<p>        # could use much improvement<\/p>\n<p>        return 0 if ($number == 1);<br \/>\n        return 0 if (($number != 2) &#038;&#038; (($number % 2) == 0));<\/p>\n<p>#       $maxprime = (int($number \/ 2) + 1);<br \/>\n        $maxprime = (int(sqrt($number)) + 1);<\/p>\n<p>        # test against all known primes thus far<\/p>\n<p>        $sth = $dbh->prepare(&#8220;SELECT prime_number FROM primes WHERE prime_number < $maxprime\");\n        $sth->execute();<\/p>\n<p>        while(($pp) = $sth->fetchrow_array()) {<br \/>\n#               return 0 if(($number != $pp) &#038;&#038; (int($number \/ $pp)) == ($number \/ $pp));<br \/>\n                return 0 if(($number != $pp) &#038;&#038; (($number % $pp) == 0));<br \/>\n        }<\/p>\n<p>        $sth->finish();<\/p>\n<p>        return 1;<br \/>\n}<\/p>\n<p>sub log_prime {<br \/>\n        my $number = shift;<br \/>\n        my $span = shift;<\/p>\n<p>        $dbh->do(&#8220;INSERT INTO primes VALUES (NULL,$number,$span,now())&#8221;);<br \/>\n}<\/p>\n<p>sub shutdown {<\/p>\n<p>                $dbh->do(&#8220;UPDATE current_location SET loc = $counter, ts = now()&#8221;);<br \/>\n                exit(0);<br \/>\n}<br \/>\n<\/lj-CUT><\/p>\n","protected":false},"excerpt":{"rendered":"<p>So, I&#8217;m generating a SQL database of the first million primes as part of one of those random side tangents that I go off on occasionally. So far I&#8217;m up to half a million, and I&#8217;ve made several optimizations. I don&#8217;t know that my primefinder is actually valid, so I&#8217;m including it for you all [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.sheer.us\/weblogs\/wp-json\/wp\/v2\/posts\/1776"}],"collection":[{"href":"https:\/\/www.sheer.us\/weblogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sheer.us\/weblogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sheer.us\/weblogs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sheer.us\/weblogs\/wp-json\/wp\/v2\/comments?post=1776"}],"version-history":[{"count":0,"href":"https:\/\/www.sheer.us\/weblogs\/wp-json\/wp\/v2\/posts\/1776\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sheer.us\/weblogs\/wp-json\/wp\/v2\/media?parent=1776"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sheer.us\/weblogs\/wp-json\/wp\/v2\/categories?post=1776"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sheer.us\/weblogs\/wp-json\/wp\/v2\/tags?post=1776"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}