找到一个数字的力量

时间:2014-03-02 06:08:55

标签: fpga exponential factorization

我有一个非常大的数字,它是几个小素数的产物。我知道这个数字,而且我知道主要因素,但我不知道他们的权力。例如:

(2^a)x(3^b)x(5^c)x(7^d)x(11^e)x .. = 2310

现在我想以非常快速有效的方式恢复指数。我想在FPGA中实现它。

此致

1 个答案:

答案 0 :(得分:2)

问题在于,当您进行二分查找时,您正在线性搜索正确的功率。下面是一个示例,示出了p的幂是10(p ^ 10)的情况。此方法以O(log N)格而不是O(N)来查找幂。

首先通过快速增加功率来找到上限,直到它太高,这发生在步骤5.然后它使用二进制搜索来找到实际功率。

  1. 通过p检查可分性。作品。
  2. 通过p ^ 2检查可分性。作品。
  3. 用p ^ 4检查可分性。作品。
  4. 用p ^ 8检查可分性。作品。
  5. 用p ^ 16检查可分性。不行。撤消/忽略这个。
  6. 通过p ^((8 + 16)/ 2)= p ^ 12检查可分性。不行。撤消/忽略这个。
  7. 用p ^((8 + 12)/ 2)= p ^ 10检查可分性。可行,但可能太低了。
  8. 用p ^((10 + 12)/ 2)= p ^ 11检查可分性。不行。撤消/忽略这个。
  9. 由于((10 + 11)/ 2)= 10.5不是整数,所以功率最低的是低端,即10。
  10. 注意,有一种方法,你实际上除以p,在步骤4,你实际上把数字除以p ^(1 + 2 + 4 + 8)= p ^ 15,但它更多一点很难解释二进制搜索部分。但是,被分割数量的大小变小,因此除法运算更快。