Math 我如何生成两个随机素数,当它们相乘时,产生一个X位的数字?(X作为论据)
我缺乏制作这个函数的数学技能 基本上,我想返回2个随机素数,当它们相乘时,会产生一些作为参数给出的位X 例如: 如果我说X是3,那么可能的解决方案是: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)
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]
[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]
[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的第二个答案可能对他更有用:-)