这个问题让我觉得有点奇怪。我很好奇您如何表示数据库中的素数列表。我不知道有哪一种数据类型能够准确且一致地存储大量素数。我担心的是,当素数开始包含 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/