1个不稳定版本

0.1.0 2023年8月1日

#1321 in 数学

GPL-3.0-or-later

28KB
545

基于rugRustcrate的素数k元查找器。该软件的目的是搜索大型素数k元。代码大量借鉴了Pttn的RieMiner。关于算法的详细解释请参阅我的解释这里和Pttn的原始writeup。目前,primerug只能被视为我更好地理解Rust和素数k元筛分的效率的练习,而不是打破世界纪录的rieMiner替代品。根据配置,它目前比具有相同搜索参数的rieMiner慢2-3倍。所以如果你的目标是打破世界纪录,你现在应该使用rieMiner或其他任何最先进的筛分器/素性测试器。

未来计划

  • 自动选择素数乘积、偏移量和素数表限制
  • 性能改进

构建

首先从这里安装Rust。然后,您可以通过简单地键入以下命令来构建项目:

cargo build --release

命令行参数

目前,为了配置primerug,您必须提供CLI参数。除了元组的十进制位数大小之外,所有参数都是可选的。运行 primerug --help 时会显示默认参数。

$ primerug --help
A prime k-tuple finder based on the rug Rust crate

Usage: primerug [OPTIONS] --digits <DIGITS>

Options:
  -d, --digits <DIGITS>          Size of the tuple in decimal digits
  -m, --m <M>                    Primorial number [default: 3]
  -o, --o <O>                    Primorial offset [default: 97]
  -p, --pattern <PATTERN>        Desired pattern [default: "0, 4, 6, 10, 12, 16"]
  -t, --tablelimit <TABLELIMIT>  Desired pattern [default: 100000]
  -i, --interval <INTERVAL>      Stats interval [default: 5]
  -t, --threads <THREADS>        Threads [default: 1]
  -h, --help                     Print help
  -V, --version                  Print version

使用的crate

  • rug 用于大数运算
  • clap 用于参数解析

示例用法

默认选项

使用默认选项实际上并不推荐,因为primerug可能会使用非最优设置,甚至可能使用与您期望不同的星座图案。但这是快速运行程序并了解其工作方式的好方法,在需要调整设置之前。

$ primerug --digits 100
Tuple Digits: 100
Primorial Number: 3
Primorial Offset: 97
Constellation Pattern: 0, 4, 6, 10, 12, 16
Prime Table Limit: 100000
Stats Interval: 5
Threads: 1
Generating primetable of the first primes up to 100000 with sieve of Eratosthenes...
Calculating primorial inverse data...
Done, starting sieving/primality testing loop...
c/s: 1, r: inf (0, 0, 0, 0, 0, 0) eta: 584554049253 y
c/s: 83, r: 13.16 (38, 0, 0, 0, 0, 0) eta: 17 h
c/s: 100, r: 13.10 (84, 5, 0, 0, 0, 0) eta: 14 h
c/s: 93, r: 12.30 (122, 8, 0, 0, 0, 0) eta: 10 h

自定义选项

以下是如何运行primerug以搜索一个超过200位的8元组的方法。

$ primerug --digits 200 -m 50 -o 380284918609481 --pattern "0, 2, 6, 8, 12, 18, 20, 26" --tablelimit 16777216
Tuple Digits: 200
Primorial Number: 50
Primorial Offset: 380284918609481
Constellation Pattern: 0, 2, 6, 8, 12, 18, 20, 26
Prime Table Limit: 16777216
Stats Interval: 5
Threads: 1
Generating primetable of the first primes up to 16777216 with sieve of Eratosthenes...
Calculating primorial inverse data...
Done, starting sieving/primality testing loop...
c/s: 1, r: inf (0, 0, 0, 0, 0, 0, 0, 0) eta: 584554049253 y
c/s: 1500, r: 15.20 (592, 34, 4, 0, 0, 0, 0, 0) eta: 22 d
c/s: 1272, r: 14.97 (935, 59, 6, 0, 0, 0, 0, 0) eta: 22 d
c/s: 1125, r: 15.22 (1183, 74, 7, 1, 0, 0, 0, 0) eta: 29 d
c/s: 1095, r: 15.49 (1485, 95, 8, 1, 0, 0, 0, 0) eta: 35 d
c/s: 1192, r: 15.34 (2021, 134, 10, 3, 0, 0, 0, 0) eta: 29 d
c/s: 1032, r: 15.38 (2080, 138, 10, 3, 0, 0, 0, 0) eta: 35 d
c/s: 1277, r: 15.26 (3014, 193, 15, 4, 0, 0, 0, 0) eta: 26 d

尝试打破世界纪录

如果您想尝试打破世界纪录,那么最简单的一个是8元组记录,目前由我保持在362位数字。以下配置在我的Ryzen 5950x上获得了最少的eta值,大约需要220天才能打破。您的硬件可能有所不同。

$ primerug --digits 400 -m 157 -o 114023297140211 --pattern "0, 2, 6, 8, 12, 18, 20, 26" --tablelimit 894144000 --threads 30
tern "0, 2, 6, 8, 12, 18, 20, 26" --tablelimit 894144000 --threads 30
Tuple Digits: 400
Primorial Number: 157
Primorial Offset: 114023297140211
Constellation Pattern: 0, 2, 6, 8, 12, 18, 20, 26
Prime Table Limit: 894144000
Stats Interval: 5
Threads: 30
Generating primetable of the first 894144000 primes with sieve of Eratosthenes...
Calculating primorial inverse data...
Done, starting sieving/primality testing loop...
c/s: 899, r: 25.64 (842, 37, 3, 0, 0, 0, 0, 0) eta: 6 y
c/s: 4227, r: 25.56 (4797, 206, 8, 0, 0, 0, 0, 0) eta: 1 y
c/s: 3627, r: 25.41 (6281, 261, 10, 0, 0, 0, 0, 0) eta: 1 y
c/s: 4804, r: 25.31 (9300, 386, 11, 0, 0, 0, 0, 0) eta: 1 y
c/s: 5224, r: 25.31 (11971, 500, 15, 0, 0, 0, 0, 0) eta: 1 y
c/s: 5316, r: 25.27 (14094, 588, 21, 0, 0, 0, 0, 0) eta: 362 d
c/s: 6018, r: 25.00 (18536, 771, 30, 0, 0, 0, 0, 0) eta: 293 d
c/s: 5917, r: 24.92 (20899, 869, 33, 0, 0, 0, 0, 0) eta: 290 d
c/s: 6544, r: 25.02 (25369, 1052, 42, 0, 0, 0, 0, 0) eta: 271 d
c/s: 6334, r: 25.09 (27520, 1137, 46, 1, 0, 0, 0, 0) eta: 287 d
c/s: 6888, r: 25.18 (32006, 1321, 57, 1, 0, 0, 0, 0) eta: 271 d
c/s: 6649, r: 25.13 (34657, 1419, 59, 1, 0, 0, 0, 0) eta: 277 d
c/s: 6945, r: 25.13 (38689, 1589, 65, 1, 0, 0, 0, 0) eta: 265 d

依赖项

约4.5MB
约85K SLoC