随机数相对于输入的素数

时间:2011-07-25 21:32:25

标签: c math random primes

在给定自然数n的情况下,什么是计算上理智的方法,生成一个相对于n的素数的随机数?

我愿意牺牲一些随机性和覆盖速度的所有可能性。也就是说,如果我只打出75%的可能(较小)相对素数,那就没问题了。

3 个答案:

答案 0 :(得分:10)

“我愿意牺牲随机性和覆盖速度的所有可能性。” 给定n,选择n + 1。

你需要更加具体。

答案 1 :(得分:5)

两个随机整数彼此相对素数的概率达到6 / pi ^ 2(在极限情况下,对于大N),或大约61%。所以生成和测试应该 是一个可行的策略 - GCD计算大约是O(log n),你可能会 得到2或3次试验的结果。

答案 2 :(得分:2)

用简单的话说:

unsigned random_prime(unsigned n){
     unsigned r = rand(), t;
     while ((t = gcd(r, n)) > 1)
         r /= t;
     return r;
}