C++ 函数uu gnu_cxx::u stl_next_prime(usigned long)做什么?

C++ 函数uu gnu_cxx::u stl_next_prime(usigned long)做什么?,c++,stl,gnu,C++,Stl,Gnu,我只是在代码中看到了这个函数,直觉上它应该返回比参数大的下一个素数。然而,当我这样称呼它时,我得到了53分!当我通过54分时,我得到97分。我在网上找不到它的功能描述,有人能给我指一个吗,或者有人知道它的功能吗?它返回的下一个素数比指定的素数大得多,值得将哈希表重新组织为该数量的桶。如果它返回的是下一个素数,那么您将过于频繁地重新组织哈希表。它是哈希表代码的一个实现细节,不打算被外部代码使用。事实上,无法通过编程有效地生成所有素数的列表。有很多方法可以有效地计算素数,但它们不会生成一个完整的列表

我只是在代码中看到了这个函数,直觉上它应该返回比参数大的下一个素数。然而,当我这样称呼它时,我得到了53分!当我通过54分时,我得到97分。我在网上找不到它的功能描述,有人能给我指一个吗,或者有人知道它的功能吗?

它返回的下一个素数比指定的素数大得多,值得将哈希表重新组织为该数量的桶。如果它返回的是下一个素数,那么您将过于频繁地重新组织哈希表。它是哈希表代码的一个实现细节,不打算被外部代码使用。

事实上,无法通过编程有效地生成所有素数的列表。有很多方法可以有效地计算素数,但它们不会生成一个完整的列表,换句话说,序列中会有很多漏洞。所以这个函数只能作为特定操作的实现细节使用。@sidran32:你的意思是因为素数是无限的,所以没有完整的列表?因为素数测试可以非常有效地完成,当然定义可能会有所不同,但使用随机算法生成一个完整的列表筛选算法并没有那么昂贵,误差可以忽略。当然,算法更好。@Grizzly不,我说的是生成素数序列,比如素数,其中,素数+1保证是数字行上素数之后的下一个绝对素数。如果没有暴力强迫,没有快速的方法可以做到这一点,暴力强迫会随着n值的增大而呈指数增长。有很多方法可以生成一个大于已知素数的素数,但它不一定是数列上的下一个绝对素数。@sidran32:确定性素数测试仍然可以在多项式时间内完成,并且素数之间的距离大约与其长度成正比,因此它不是指数时间。测试每个数字的素性并不是一种获得下一个素数的坏方法。特别是如果,就像大多数应用程序一样,如果计算机计算错误的概率高于算法错误的概率,则不需要100%确定该数字为素数。。。。在这种情况下,随机化可以很好地完成这项工作。@Grizzly但是因为我们没有一种可靠的方法来生成素数而不使用暴力,我们不知道你所建议的模式是否可以无限期地继续下去。当然,除非我弄错了。我知道你可以从sqrtn开始测试,所以也许我夸大了?这仍然非常耗时。不过,我是在回应OP的假设。我无法想象它会是一个广义函数,正如所描述的那样,因为用例可能需要比您得到的更高的性能。啊,我明白了,您知道所使用的算法的旋转是什么吗?像next prime这样至少两倍大的东西?还是更复杂的?这是一个固定的查找表。我不知道他们使用的确切算法,但通常情况下,你乘以2的某个值,然后在附近找到一个不太接近2的幂的素数。如果你真的很勤奋,你可以用“典型”数据测试素数的好坏。表格为:53 97 193 389 769 1543 3079 6151 12289 24593 49157 98317 196613 393241 786433 1572869 3145739 6291469 12582917 25165 843 50331653 100663319 201326611 402653189 805306457 1610612741 322225473 4294967291