Given Prime Number N, Compute the Next Prime?

后端 未结 9 1739
忘掉有多难
忘掉有多难 2020-11-29 17:41

A coworker just told me that the C# Dictionary collection resizes by prime numbers for arcane reasons relating to hashing. And my immediate question was, \"how does it know

相关标签:
9条回答
  • 2020-11-29 18:00

    For sheer novelty, there’s always this approach:

    #!/usr/bin/perl
    for $p ( 2 .. 200  ) {
          next if (1x$p) =~ /^(11+)\1+$/;
          for ($n=1x(1+$p); $n =~ /^(11+)\1+$/; $n.=1) { }
          printf "next prime after %d is %d\n", $p, length($n);
    }
    

    which of course produces

    next prime after 2 is 3
    next prime after 3 is 5
    next prime after 5 is 7
    next prime after 7 is 11
    next prime after 11 is 13
    next prime after 13 is 17
    next prime after 17 is 19
    next prime after 19 is 23
    next prime after 23 is 29
    next prime after 29 is 31
    next prime after 31 is 37
    next prime after 37 is 41
    next prime after 41 is 43
    next prime after 43 is 47
    next prime after 47 is 53
    next prime after 53 is 59
    next prime after 59 is 61
    next prime after 61 is 67
    next prime after 67 is 71
    next prime after 71 is 73
    next prime after 73 is 79
    next prime after 79 is 83
    next prime after 83 is 89
    next prime after 89 is 97
    next prime after 97 is 101
    next prime after 101 is 103
    next prime after 103 is 107
    next prime after 107 is 109
    next prime after 109 is 113
    next prime after 113 is 127
    next prime after 127 is 131
    next prime after 131 is 137
    next prime after 137 is 139
    next prime after 139 is 149
    next prime after 149 is 151
    next prime after 151 is 157
    next prime after 157 is 163
    next prime after 163 is 167
    next prime after 167 is 173
    next prime after 173 is 179
    next prime after 179 is 181
    next prime after 181 is 191
    next prime after 191 is 193
    next prime after 193 is 197
    next prime after 197 is 199
    next prime after 199 is 211
    

    All fun and games aside, it is well known that the optimal hash table size is rigorously provably a prime number of the form 4N−1. So just finding the next prime is insufficient. You have to do the other check, too.

    0 讨论(0)
  • 2020-11-29 18:05

    As others have already noted, a means of finding the next prime number given the current prime has not been found yet. Therefore most algorithms focus more on using a fast means of checking primality since you have to check n/2 of the numbers between your known prime and the next one.

    Depending upon the application, you can also get away with just hard-coding a look-up table, as noted by Paul Wheeler.

    0 讨论(0)
  • 2020-11-29 18:18

    Just a few experiments with inter-primes distance.


    This is a complement to visualize other answers.

    I got the primes from the 100.000th (=1,299,709) to the 200.000th (=2,750,159)

    Some data:

    Maximum interprime distance = 148
    
    Mean interprime distance = 15  
    

    Interprime distance frequency plot:

    alt text

    Interprime Distance vs Prime Number

    alt text

    Just to see it's "random". However ...

    0 讨论(0)
提交回复
热议问题