在C / C ++中生成2个限制之间的随机素数
是否有内置函数可以在C / C ++中的2个给定限制之间生成随机素数?
我想要一个可以生成100万到10亿之间随机素数的函数
你可以这样有效地做到这一点:
- 在该间隔中生成随机数;
- 检查它是否可以被前几个素数中的任何一个整除(例如
2 .. 17
,实验以获得最佳结果)。 如果是,请转到1; - 使用米勒 – 拉宾来测试素性。
还可以看一下类似的,更复杂的想法。
当我不得不这样做时,我创建了一个名为isPrime()的函数。 isPrime()将检查并确定一个数字是否为素数。
isPrime()有两个不同的函数,一个将永远运行并打印每个素数而另一个将运行到一定数量的函数。
您可以使用i和j之间的所有素数填充数组。 然后生成一个小于或等于数组大小的随机数。 使用此随机数从数组中选择一个元素。
希望这可以帮助!
要在两个边界之间生成随机数,请执行此操作
extern unsigned int urand(); int lower = 1000000; int upper = 1000000000; int p = urand() % (upper - lower) + lower;
为了测试一个接近10亿的数字是否为素数,按所有素数 并将它们全部分开。 如果所有试验区都有余数!= 0则该数字为素数。 我怀疑任何更复杂的素性测试对于这样的小素数都会更快。
unsigned short primes[3400] = { 2, 3, 5, .. 31657 }