社区讨论
求问随机素数
学术版参与者 5已保存回复 11
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mjl6o7a1
- 此快照首次捕获于
- 2025/12/25 16:31 2 个月前
- 此快照最后确认于
- 2025/12/27 15:50 2 个月前
论如何实现随机素数
下文中,简记 表示区间 且
比如我要一个函数
ll rdp(ll l, ll r)(typedef long long ll;)表示在区间 内随机一个素数。已经定义了函数 ll rdn(ll l, ll r) 表示区间 内随机整数。一般写法是:
Cdo {
p = rdn(l, r);
} while (isprime(p));
其中
isprime 是质数检查(为了减少时间默认为 12 组基底的稳定 Miller-Rabin)。但是,数据一大,或者 rp 不佳,就会卡很久。更好的方法是基于素数筛,令
Cprm[i] 表示 1-based 意义下第 个质数,sz[i] 表示 的质数个数,则有prm[rdn(sz[l], sz[r])]
但是这样的缺点也很明显,就是容易内存爆炸。
所以,本蒟蒻在这里发出问题:如何在时间和空间都适合(例如:
1s, 512 MB)的情况下随机出一个质数?回复
共 11 条回复,欢迎继续交流。
正在加载回复...