【问题标题】:Is it possible to test whether a number is prime or not in O(logn)?是否可以在 O(logn) 中测试一个数字是否为素数?
【发布时间】:2019-06-25 10:50:44
【问题描述】:

一个月以来,我一直在阅读一本具有竞争力的编程书籍。这本书是由我国(孟加拉国)的世界决赛选手之一撰写的。需要指出的是,这本书是用我们的母语(孟加拉语)写的,在世界范围内并不那么受欢迎。因为有孟加拉语的内容,我不能在这里引用它。这就是为什么我首先感到抱歉。

在那本书的数论章节中,给出了许多算法来测试素数。他展示的最优化的是 O(nloglogn) 中的“Eratosthenes 筛”。但他写了一行。我正在翻译它。 “有一种在 O(logn) 中测试素数的更有效方法。你自己想一想。如果你失败了,就用谷歌搜索吧!!”

我用谷歌搜索过。但我没有找到任何令人满意的东西。

真的可以在 O(logn) 中测试一个数字的素数吗? 如果可能,那么可以得出什么范围??

【问题讨论】:

  • 他可能的意思是,一旦预先计算了筛子,您就可以在 O(logn) 中测试素数。该方法已讨论here
  • 你给出的不是素数测试,而是素数分解。 @VishnuDasu
  • 您可以轻松修改代码以确定数字是否为质数。一种简单的方法是只计算因子的数量。复杂度仍然是 O(logn)。 @KaziZiaulHassan

标签: algorithm data-structures number-theory primality-test


【解决方案1】:

陈述不正确。对于数字 N,位数为O(log N),因此该语句意味着存在一种算法,该算法在位数上是线性。最著名的结果是位数的多项式。 (Agrawal-Kayal-Saxena 素数检验,Õ(logN 12)。这是 logN 的 12 次方,而不是 1。

仍然,Õ(logN 12) ⊂ O(N)

【讨论】:

  • 我从未见过符号Õ。这是什么意思?
  • 即使对于概率算法,它也至少是 Õ(k*log N^2^)。
  • @0x499602D2:忽略 O(log(log(N))) 的因素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 2015-03-08
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
  • 2013-01-06
相关资源
最近更新 更多