Performance 为什么整数分解是非多项式时间?

Performance 为什么整数分解是非多项式时间?,performance,cryptography,rsa,public-key-encryption,factorization,Performance,Cryptography,Rsa,Public Key Encryption,Factorization,我只是计算机科学的初学者。我学到了一些关于跑步时间的知识,但我不能确定我所理解的是正确的。所以请帮帮我 所以整数分解目前不是多项式时间问题,但素性检验是。假设要检查的数字是n。如果我们运行一个程序只是为了确定从1到sqrt(n)的每个数字是否可以除以n,如果答案是肯定的,则存储该数字。我认为这个程序是多项式时间的,不是吗 一种可能的错误方法是,因子分解程序应该找到所有的素数,而不是发现的第一个素数。也许这就是原因 然而,在公钥密码学中,找到一个大数的素因子是攻击密码学的关键。由于大数(公钥)通常

我只是计算机科学的初学者。我学到了一些关于跑步时间的知识,但我不能确定我所理解的是正确的。所以请帮帮我

所以整数分解目前不是多项式时间问题,但素性检验是。假设要检查的数字是n。如果我们运行一个程序只是为了确定从1到sqrt(n)的每个数字是否可以除以n,如果答案是肯定的,则存储该数字。我认为这个程序是多项式时间的,不是吗

一种可能的错误方法是,因子分解程序应该找到所有的素数,而不是发现的第一个素数。也许这就是原因

然而,在公钥密码学中,找到一个大数的素因子是攻击密码学的关键。由于大数(公钥)通常只是两个素数的乘积,因此找到一个素数意味着找到另一个素数。这应该是多项式时间。那么,为什么攻击很难或不可能呢

如果我们运行一个程序只是为了确定从1到sqrt(n)的每个数字是否可以除以n,如果答案是肯定的,则存储该数字

即使忽略了较大数字的可分性测试将花费更长的时间,这种方法如果只向
n
添加一个(二进制)数字,所花费的时间几乎是原来的两倍。(事实上,如果你加两位数字,需要两倍的时间)

我认为这就是指数运行时的定义:使
n
长一点,算法需要两倍的时间


但请注意,这一观察结果仅适用于您提出的算法。整数因式分解是多项式还是非多项式仍然是未知的。密码学家当然希望不是这样,但也有一些替代算法不依赖于难以实现的素数分解(如椭圆曲线密码),以防万一……

对复杂性的随意描述,如“多项式分解算法”,通常指的是与输入大小相关的复杂性,不是输入的解释。所以当人们说“没有已知的多项式分解算法”时,他们的意思是没有已知的算法来分解N位自然数,这些自然数在时间多项式中相对于N运行,而不是多项式相对于数本身,这可能高达2^N。

因子分解的难度是一个美丽的数学问题,它简单易懂,让你立即进入人类知识的边缘。总结一下(今天)关于这一主题的知识:我们不知道为什么这很难,没有任何程度的证明,以及我们在多项式时间(但也明显少于指数时间)内运行的最佳方法。在P中是偶数的结果是最近的;请参阅链接的维基百科页面

对于这个困难,我所知道的最好的启发式解释是素数是随机分布的。其中一个更容易理解的结果是。这个定理说,每一个算术级数都包含无穷多个素数,换句话说,你可以认为素数相对于级数是稠密的,这意味着你无法避免遇到它们。这是一个相当大的结果集合中最简单的一个;在所有这些例子中,素数的出现方式与随机数非常相似


因此,因子分解的困难类似于一次性pad不可能反转。在一次性pad中,有一点我们不知道,另一个我们不知道。在知道异或运算结果的情况下,我们得到的关于单个位的信息为零。将“bit”替换为“prime”,并将乘法替换为XOR,那么就会出现分解问题。就好像你将两个随机数相乘,从乘积中得到的信息很少(而不是零信息)。

你首先说的是检查这个数是否为素数。因为这些数字很大!如果您认为算法X具有多项式复杂性,请尝试编写表示其复杂性的多项式。如果你成功了,那么X具有多项式复杂性,如果你失败了,你可能想用X没有多项式复杂性的想法来安慰自己,这将比你没有找到(或a)多项式的想法更令人安慰。但是,更严肃地说,试着根据整数中的位数写出一个整数分解的复杂度方程,并研究它的形式。输入的大小,输入的解释,不是吗?为什么我们用位来表示输入的大小,而不是解释输入?