【问题标题】:Is a number prime? Codewars kata solution timing out. How to improve it?数是素数吗? Codewars kata 解决方案超时。如何改进它?
【发布时间】:2022-01-30 19:22:00
【问题描述】:

根据标题,我已经解决了以下 kata https://www.codewars.com/kata/5262119038c0985a5b00029f,这是我的解决方案:

 let isPrime = (num) => {
     for (let i = 2; i < num; i++)
         if (num % i === 0)

         return false;
    return num > 1;
}

kata 描述如下:

定义一个函数,该函数接受一个整数参数并根据整数是否为素数返回逻辑值 true 或 false。

根据维基百科,素数(或素数)是大于 1 的自然数,除 1 和自身之外没有正除数。

要求 您可以假设您将获得一个整数输入。 你不能假设整数只会是正数。您也可能得到负数(或 0)。 关于性能的注意事项:不需要花哨的优化,但最简单的解决方案仍然可能会超时。数字最多为 2^31(或类似,取决于语言版本)。一直循环到 n 或 n/2 会太慢。

所以我的问题是,由于我的解决方案超时,我该如何改进它?谢谢!

【问题讨论】:

  • “一直循环到 n 或 n/2 会太慢。” 所以,你需要做一些研究并弄清楚如何改变你的循环。
  • 在我看来你的if 循环体是空的——这是故意的吗? (编辑:这可能只是因为 textarea 弄乱了缩进)
  • @user3386109 非常感谢!非常有帮助!你为什么认为我写了这篇文章?
  • 你应该展示你的研究成果。实际上,您应该牢记 user3386109 的评论。他们实际上指出了可以改进并且您应该研究的部分......
  • 我不明白你为什么会觉得这里不友善。我们都是在这里提供帮助的志愿者。我们相信,如果我们帮助您自助,我们会提供最大的帮助。第一条评论很好地表明了在哪里看。为什么不欣赏这一点,而不是回复 “你为什么认为我写了这篇文章”...

标签: arrays algorithm primes


【解决方案1】:

查看Sieve of Eratosthenes,您会发现在什么时候可以停止增加i

剧透:sqrt(num)

【讨论】:

  • 非常感谢。将进一步研究它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 2012-09-11
  • 2021-12-26
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
相关资源
最近更新 更多