Math 我如何生成两个随机素数,当它们相乘时,产生一个X位的数字?(X作为论据)

Math 我如何生成两个随机素数,当它们相乘时,产生一个X位的数字?(X作为论据),math,primes,bits,Math,Primes,Bits,我缺乏制作这个函数的数学技能 基本上,我想返回2个随机素数,当它们相乘时,会产生一些作为参数给出的位X 例如: 如果我说X是3,那么可能的解决方案是: p=2和q=3,因为2*3=6(110有3位)。如果知道位的数量,可以生成一个数字2^(x-2)

我缺乏制作这个函数的数学技能

基本上,我想返回2个随机素数,当它们相乘时,会产生一些作为参数给出的位X

例如:

如果我说X是3,那么可能的解决方案是:
p=2和q=3,因为2*3=6(110有3位)。

如果知道位的数量,可以生成一个数字2^(x-2) 伪代码:

x = bits
primelist[] = makeprimelist()
rand = randnum between 2^(x-2) and 2^(x-1)
n = findposition(primelist, rand)
do
    result = primelist[n]*primelist[n+1]
    n--
while result > 2^(x-1)

请注意,以这种方式生成的数字将始终以“1”作为最高有效位,因此可以生成多个x-1位,并将1钉在末端。

如果您知道位数,则可以生成一个数字2^(x-2) 伪代码:

x = bits
primelist[] = makeprimelist()
rand = randnum between 2^(x-2) and 2^(x-1)
n = findposition(primelist, rand)
do
    result = primelist[n]*primelist[n+1]
    n--
while result > 2^(x-1)

请注意,以这种方式生成的数字的最高有效位始终为“1”,因此可以生成多个x-1位,并将1固定在末尾。

此语句的一个问题是,它从要求两个“随机”素数开始。如果没有任何关于所需随机素数分布的明确说明,我们已经陷入困境。(这是一个经典悖论的开始,我们被要求生成一个“随机”整数。)

但是假设我们把这个语句改为寻找任意两个素数,这两个素数可以得到给定位数x的期望乘积。答案是微不足道的

二进制表示中正好有x位的数字集是半开整数集[2^(x-1),2^x-1]

  • 选择一个小于或等于(2^x-1)/2的任意素数。叫它p1

  • 接下来,选择位于区间(2^(x-1)/p1,(2^x-1)/p1)中的第二个素数。称之为p2

  • p1*p2将在所需的间隔内,这必须是真的

    例如,给定x=10,那么乘积必须位于区间[5121023]中,即正好有10位的整数集。(注意,在这个区间内显然有147个这样的数字,正好有两个素数。)

    步骤1:

    选择p1作为任何不大于1023/2=511.5的素数。我将选择p1=137。那么第二个素数因子必须是位于区间的素数

    [512 1023]/137
    ans =
        3.7372    7.4672
    
    因此,要么是5,要么是7

    dec2bin(137*[5 7])
    ans =
        1010101101
        1110111111
    

    这个语句的一个问题是,它从要求两个“随机”素数开始。如果没有任何关于所需随机素数分布的明确说明,我们已经陷入困境。(这是一个经典悖论的开始,我们被要求生成一个“随机”整数。)

    但是假设我们把这个语句改为寻找任意两个素数,这两个素数可以得到给定位数x的期望乘积。答案是微不足道的

    二进制表示中正好有x位的数字集是半开整数集[2^(x-1),2^x-1]

  • 选择一个小于或等于(2^x-1)/2的任意素数。叫它p1

  • 接下来,选择位于区间(2^(x-1)/p1,(2^x-1)/p1)中的第二个素数。称之为p2

  • p1*p2将在所需的间隔内,这必须是真的

    例如,给定x=10,那么乘积必须位于区间[5121023]中,即正好有10位的整数集。(注意,在这个区间内显然有147个这样的数字,正好有两个素数。)

    步骤1:

    选择p1作为任何不大于1023/2=511.5的素数。我将选择p1=137。那么第二个素数因子必须是位于区间的素数

    [512 1023]/137
    ans =
        3.7372    7.4672
    
    因此,要么是5,要么是7

    dec2bin(137*[5 7])
    ans =
        1010101101
        1110111111
    

    这里“随机”的含义不是很清楚。你是否有机会尝试实现RSA?如果p有x位,q有y位,那么p*q有x+y位。这里“随机”的含义不是很清楚。你有没有可能尝试实现RSA?如果p有x位,q有y位,那么p*q有x+y位。是的。分布很重要。:)整个答案在形式上是精确的,但是:如果两个分布都是线性的,那么第二个素数
    2
    的概率大于0.7。如果PO无意中忘了写产品不应该容易分解,那么Thomas的第二个答案对他更有用:-)是的。分布很重要。:)整个答案在形式上是精确的,但是:如果两个分布都是线性的,那么第二个素数
    2
    的概率大于0.7。如果PO无意中忘了写产品不应该很容易分解,那么Thomas的第二个答案可能对他更有用:-)