#素数 #生成器 #性能

concurrent_prime_sieve

用于并发生成素数筛选器和集合的工具。Rust 实现的 Atkin 筛法。此实现运行在 O( sqrt(max_num) + section_size ) (其中 section_size = max_num - min_num)。在某些情况下与 primal 集成以提高速度。

10 个版本

使用旧的 Rust 2015

0.3.3 2017年2月26日
0.3.2 2017年2月24日
0.2.5 2017年2月23日
0.1.1 2017年2月18日

#500 in 并发

Download history 7/week @ 2024-03-07 2/week @ 2024-03-14 7/week @ 2024-03-28 7/week @ 2024-04-04

每月 103 下载

MIT 许可证

23KB
409

concurrent_prime_sieve Crate 构建状态

用于并发生成素数筛选器和集合的工具。

Rust 实现的 Atkin 筛法。

此实现以 O( sqrt(max_num) + section_size ) 的时间复杂度运行,内存使用为 O( section_size )。(其中 section_size = max_num - min_num)

此实现旨在与并行处理、分布式计算任务兼容,或当需要在近似二次大小的范围内获得合理数量的素数时。例如,如果需要在大小为 10^9 的块中找到从大约 10^18 开始的素数。

通过整合 Huon Wilson 的 primal 包(见下文),此包还可以通过并发更快地计算低于所需阈值的所有素数。

使用此算法,无需计算较小的素数或线程间的任何通信,因为每个素数区间都是完全独立计算的。因此,它非常适合分布式系统,并且易于实现。

此包利用 Huon Wilson 的(非常好的)primal 包(位于此处:[https://crates.org.cn/crates/primal](https://crates.org.cn/crates/primal))计算从 0 开始的素数边界情况。这比仅使用此处构建的并发算法要快得多。该算法计算从 0 开始的素数比此实现快约 12 倍。此包利用这一点将找到相同数量素数的时间缩短到 12/(cores+11)。::filter

fn prime_filter(max_num: usize) -> Vec<bool>

生成一个大小为 max_num 的 bool 向量,每个素数索引处的值为 true,否则为 false

线程数基于检测到的虚拟核心数量。

fn prime_filter_concurrently(max_num: usize, threads: usize) -> Vec<bool>

类似于 fn prime_filter,但允许自定义线程数。

fn prime_filter_sequentially(max_num: usize) -> Vec<bool>

类似于 fn prime_filter,但不创建任何新线程。(注意:这只是 primal_sieve::Sieve 的向量转换。)

fn prime_filter_section(min_num:usize, max_num: usize) -> Vec<bool>

类似于 fn prime_filter,但仅用于 min 和 max 之间的数字,结果以长度为 max-min 的向量返回。

fn prime_filter_section_concurrently(min_num: usize, max_num: usize, threads: usize) -> Vec<bool>

类似于 fn prime_filter_section,但允许自定义线程数。

fn prime_filter_section_sequentially(min_num: usize, max_num: usize) -> Vec<bool>

类似于 fn prime_filter_section,但不创建任何新线程。(注意:对于 min_num <= 210,这仅仅是 primal_sieve::Sieve 的向量转换。)

此包利用 Huon Wilson 的(非常好的)primal 包(位于此处:[https://crates.org.cn/crates/primal](https://crates.org.cn/crates/primal))计算从 0 开始的素数边界情况。这比仅使用此处构建的并发算法要快得多。该算法计算从 0 开始的素数比此实现快约 12 倍。此包利用这一点将找到相同数量素数的时间缩短到 12/(cores+11)。::集合

fn primes(max_num: usize) -> Vec<usize>

生成一个严格小于 max_num 的素数向量集合。

线程数基于检测到的虚拟核心数量。

fn primes_concurrently(max_num:usize, threads:usize) -> Vec<usize>

类似于 fn primes,但允许自定义线程数。

fn primes_sequentially(max_num: usize) -> Vec<usize>

类似于 fn primes,但不创建任何新线程。(注意:这只是 primal_sieve::SievePrimes 的向量转换。)

fn primes_section(min_num: usize, max_num: usize) -> Vec<usize>

生成一个在 min_num 和 max_num 之间的素数向量集合。

线程数基于检测到的虚拟核心数量。

fn primes_section_concurrently(min_num:usize, max_num:usize, threads:usize) -> Vec<usize>

类似于 fn primes_section,但允许自定义线程数。

fn primes_section_sequentially(min_num:usize, max_num:usize, threads:usize) -> Vec<usize>

类似于 fn primes_section,但不创建任何新线程。(注意:对于 min_num <= 210,这仅仅是 primal_sieve::SievePrimes 的向量转换。)

依赖项

~780KB
~13K SLoC