mysql - 在数据库中存储大质数

标签 mysql database oracle postgresql primes

这个问题让我觉得有点奇怪。我很好奇您如何表示数据库中的素数列表。我不知道有哪一种数据类型能够准确且一致地存储大量素数。我担心的是,当素数开始包含 1000 位数字时,从数据库中引用可能有点困难。有没有办法在数据库中表示大量素数?我很确定之前已经讨论过这个话题。

其中一个使它变得困难的问题是质数不能被分解成因子。如果他们可以,这个问题会容易得多。

最佳答案

如果你真的想将质数存储为数字和其中一个问题,阻止你的是“质数不能分解成因子”,还有另一件事:将它存储在按序列排序的任何数字的模数列表中。

小例子:

2831781 == 2*100^3 + 83*100^2 + 17*100^1 + 81*100^0

列表是:

81, 17, 83, 2

在实际应用中,按 2^32(32 位整数)的模数拆分很有用,特别是如果处理应用程序中的质数存储为字节数组。

数据库中的存储:

create table PRIMES
(
  PRIME_ID         NUMBER not null,
  PART_ORDER       NUMBER(20) not null,
  PRIME_PART_VALUE NUMBER not null
);

alter table PRIMES 
add constraint PRIMES_PK primary key (PRIME_ID, PART_ORDER) using index;

插入上面的示例(1647 仅作为示例):

insert into primes(PRIME_ID, PART_ORDER, PRIME_PART_VALUE) values (1647, 0, 81);
insert into primes(PRIME_ID, PART_ORDER, PRIME_PART_VALUE) values (1647, 1, 17);
insert into primes(PRIME_ID, PART_ORDER, PRIME_PART_VALUE) values (1647, 2, 83);
insert into primes(PRIME_ID, PART_ORDER, PRIME_PART_VALUE) values (1647, 3, 82);

prime_id 值可以从 oracle 序列分配...

create sequence seq_primes start with 1 increment by 1;

获取要插入的下一个质数的 ID:

select seq_primes.nextval from dual;

选取指定id的素数内容:

select PART_ORDER, PRIME_PART_VALUE 
from primes where prime_id = 1647 
order by part_order

关于mysql - 在数据库中存储大质数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1907409/

相关文章:

ruby-on-rails - rake 数据库 :create gives undefined method `[]' for nil:NilClass error

oracle - 无法在 Oracle SQL Developer v19.0.1 中创建 PRIVATE TEMPORARY TABLE(错误 : ORA-00905)

sql - 在oracle中找到列中最长行的长度

c - 构建过程后如何在 cmake 中编译其他源文件

MySQL 返回表名和数据库中所有表的字段数据

mysql - Qt 上的 NOW() 函数

mysql - 插入重复的 MySQL 测试数据的简单方法?

PHP SQL 数据库查询错误信息

java - Android 上 SQLite 数据库的简单导出和导入

mysql按两列连接查询顺序