在给定自然数n
的情况下,什么是计算上理智的方法,生成一个相对于n
的素数的随机数?
我愿意牺牲一些随机性和覆盖速度的所有可能性。也就是说,如果我只打出75%的可能(较小)相对素数,那就没问题了。
答案 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;
}