1个不稳定版本
0.1.0 | 2023年8月1日 |
---|
#1321 in 数学
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
示例用法
默认选项
使用默认选项实际上并不推荐,因为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