4 ms·
Fast prime numbers
- dalke 16y agoWhere "fast" is defined as "involves disk reads" and "prime numbers" should have the qualifier "under 200." The algorithm is brute force testing of all values up to sqrt(n), which is worse than the one the ancient Greeks used.
- stcredzero 16y agoIf you want to deal with "real man's" prime numbers (those large enough to be used for secure cryptography) there are fast probabilistic tests which can quickly ensure confidence greater than the probability of your machine not getting blown up by lightning. http://en.wikipedia.org/wiki/Primality_test http://en.wikipedia.org/wiki/Primality_test
- joemanaco 16y agoyes, it's brute force, and the there are much faster algorithms. I just wanted to show, that it's possible to move expensive calculations to compile time with C++ Templates.
- dalke 16y agoThen the article is woefully mistitled. If I was doing this in C I would just write the code to generate a static table, so this isn't that useful of an good example except as very basic pedagogy. Also, you should show how the compiler time increases if you want it to compute, say, the 200th prime.
- joemanaco 16y agoHmmm, I'm thinking you're right. I've renamed it to "How to move prime calculation from execution to compile time". I hope this title fits better with the content.
- dalke 16y agoHey, this is HN. We're supposed to argue and talk past each other with no changes in what we've done or believe. ;) (And yes, it does fit better.) Cheers.
- JoachimSchipper 16y agoAre you just submitting everything from your company's blog?
- IChrisI 16y agoMoving a slow algorithm to compile time, or precomputing it, does not make it faster. This title is wrong.
- ajays 16y agoSuch abuse of the templating system is why I dislike C++.
- joemanaco 16y agoIt's why I love C++ :-)
- rkneufeld 16y agoBehold, MR.Prime! https://github.com/rkneufeld/mr_prime https://github.com/rkneufeld/mr_prime It's a little ruby Miller-Rabin primality tester I wrote with my friend in Crypto class that can handle ~500 digit primes in less than a few seconds. I think my friend also wrote a C extension for it - super fast. Edit: spelling.
- eqdw 16y agoIIRC, it was sub-second speed when he was done optimizing. I wrote a non-optimized version of this in Ruby, ran in ~10sec. Then I rewrote it in C, and it was <1ms runtime for 20-100 digit inputs. Yay algorithms!