计算第K个素数
暂时没有时间整理,先放在这里:
http://www.quora.com/Prime-Numbers/What-are-good-ways-to-find-nth-prime-number-in-the-fastest-way
—————————————————————————————————————————————————————————————————————
This is an algorithm to test whether or not a given integer is prime. It's called the AKS primality test http://en.m.wikipedia.org/wiki/A...
And can be done in polynomial time, which is usually considered a decent amount of time.
Now if you're trying to compute the nth prime, it has been proven that the nth prime must be greater than
and less than
When . So if you're searching for the nth prime, I'd look in this gap.
——————————————————————————————————————————————————————————————————————
There is no general formula to compute nth prime number.
[1] http://en.wikipedia.org/wiki/Sie...
[2] http://primes.utm.edu/nthprime/a...
———————————————————————————————————————————————————————————————————————
附上一个同学写的用bitarray实现的http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes求素数的方法:
/* * ======================================================================== * * Filename: bitset.h * * Description: bitset implementation in c. * * Created: 05/27/2013 11:09:43 PM * * Author: Fu Haiping (forhappy), haipingf@gmail.com * Company: ICT ( Institute Of Computing Technology, CAS ) * * ======================================================================== */ #include <limits.h> /* for CHAR_BIT */ #define BITMASK(b) (1 << ((b) % CHAR_BIT)) #define BITSLOT(b) ((b) / CHAR_BIT) #define BITSET(a, b) ((a)[BITSLOT(b)] |= BITMASK(b)) #define BITCLEAR(a, b) ((a)[BITSLOT(b)] &= ~BITMASK(b)) #define BITTEST(a, b) ((a)[BITSLOT(b)] & BITMASK(b)) #define BITNSLOTS(nb) ((nb + CHAR_BIT - 1) / CHAR_BIT) /* * char bitarray[BITNSLOTS(47)]; * BITSET(bitarray, 23); * if(BITTEST(bitarray, 35)) ... * * */ #include <stdio.h> #include <string.h> #define MAX 10000 int main() { char bitarray[BITNSLOTS(MAX)]; int i, j; memset(bitarray, 0, BITNSLOTS(MAX)); for(i = 2; i < MAX; i++) { if(!BITTEST(bitarray, i)) { printf("%d\n", i); for(j = i + i; j < MAX; j += i) BITSET(bitarray, j); } } return 0; }
你问我生命中还有什么可追寻?