我正在尝试制作一个强力程序来猜测和检查数字,直到找到两个未知的素数乘以一个已知的数字。但是,当已知数字为 64 位长时,从 3x5、3x7 等开始效率很低,因此我创建了这个公式来查找我应该开始的两个数字。这里
m
是已知的乘积,为了得到这两个数字,我首先在末尾加一或减一。这个想法是使用 log2 并向上舍入来查找乘积使用的位数,然后除以二并减一以查找倍数使用的位数。为了避免在处理 64 位数字时必须从 2x3、2x5、2x7、2x11 开始,我尝试制定一个公式来找出可以从哪些数字开始。我想出了这个公式
在这里,我找到乘积 (m) 使用的位数(log2(m) 四舍五入),将其除以二并减一,得到我认为的两个质因数可以使用的最小位数。然后我在最后加或减一来找到我开始的两个数字。但现在我有疑问,因为如果大素数只是 2x[巨大素数]呢?
我假设你的意思是“64位数字”是设置了位63的东西,也许位63没有设置但位62设置了;在 64 位安全性的背景下,我同意您的观点。同样,您可能指的是“32 位数字”,其位设置在 31 或 30 左右。
简而言之,即使有这样的假设,答案也是“否”。
因为产品可能是不对称的,例如“34 位数字”x“30 位数字”,36x28。 据我所知,安全方法通常会有意避开接近乘积平方根的任何内容。虽然没有达到 60x4。