postgresql 梅森素数处理

kqhtkvqz  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(135)

我对梅森素数https://www.mersenne.org/很感兴趣。伟大的互联网梅森素数搜索(GIMPS)正在做这方面的研究。这些都是素数,但非常大,数量很少。第49个梅森素数是2200万位数。令人难以置信的是,一个数字可以是2200万位数。
我尝试过,可以赶上第八梅森素数,这是10位数长,在20亿。我使用Postgres BIGINT,它支持高达19位数长的整数,其中9百万亿。所以,如果我处理10亿行的时间,我可以进一步使用NUMERIC数据类型,它支持十进制左边的131072位数和精度16383位数。当然我只需要处理整数。我不需要精度。另一种选择是Postgres的CHAR VARYING,它存储多达十亿。但它不能用于计算。
Postgres提供的东西足以满足任何实际需求。我的问题是GIMPS的家伙是如何计算这么大的数字的。他们是否将这些数字存储在任何数据库中。哪个数据库支持这么大的数字。我是否与数据库世界的进步不同步。
我知道他们有巨大的处理能力,柯蒂斯库珀提到700台服务器被用来发现和验证数字。确切地说,需要多少存储空间。使用什么语言。
只是好奇。这听起来像是我失业了吗。
谢谢
bb23850

iezvtpos

iezvtpos1#

梅森数非常容易计算,它们总是小于2的幂:

select n, cast(power(cast(2 as numeric), n) - 1 as numeric(1000,0))
from generate_series(1, 100, 1) gs(n)
order by n;

字符串
挑战是确定结果是否是素数。梅森知道n需要是素数,对应的梅森数才是素数。
尽管计算机的速度很快,但当一个数超过一打或二十几位时,穷举所有因子的搜索是不可行的。从上面的代码中可以看出,穷举搜索在第100个梅森数之前就变得不可行了。
为了确定这样的数是否是质数,需要用到很多数学方法--其中一些是为这个特定的问题发明的,或者是受这个特定问题的启发。我很确定在关系数据库中实现任何这些质数测试都是相当困难的。

相关问题