我只是想知道为什么在类的hashCode()方法中使用素数? 例如,当使用Eclipse生成我的hashCode()方法时,总是使用素数31 : public int hashCode() { final int prime = 31; //… } 参考文献: 这里是一个关于哈希码和哈希如何工作,我发现(C#,但概念是可转移的)的文章的一个很好的入门: Eric Lippert的准则和GetHashCode()
这不是功课,我只是好奇而已。 无限是这里的关键词。 我希望用它作为primes()中的p。 我相信这是Haskell的一个内置函数。 所以,答案不能像“只是做一个筛子”那样幼稚。 首先,你不知道会消耗多less连续的素数。 那么,假设你可以一次制造100个。 你会使用相同的筛法和质数公式的频率吗? 我更喜欢非并发的方法。 感谢您阅读(和写作))!
这是我能想到的最好的algorithm。 def get_primes(n): numbers = set(range(n, 1, -1)) primes = [] while numbers: p = numbers.pop() primes.append(p) numbers.difference_update(set(range(p*2, n+1, p))) return primes >>> timeit.Timer(stmt='get_primes.get_primes(1000000)', setup='import get_primes').timeit(1) 1.1499958793645562 它可以做得更快吗? 这个代码有一个缺陷:因为numbers是一个无序的集合,不能保证numbers.pop()将从集合中删除最低的数字。 尽pipe如此,对于一些input数字来说(至less对我来说)起作用: >>> sum(get_primes(2000000)) 142913828922L #That's the correct sum of all numbers below 2 million >>> 529 in get_primes(1000) False >>> 529 in get_primes(530) True
哪个是用C ++查找素数的最快算法? 我已经使用sieve的算法,但我仍然希望它更快!