微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

返回范围 [a,b] 中所有素数的计数,使得所有数字都来自集合 {1,5,9} 1<=a<=b<=10⁹

如何解决返回范围 [a,b] 中所有素数的计数,使得所有数字都来自集合 {1,5,9} 1<=a<=b<=10⁹

返回范围 [a,b] 中所有素数的计数,使得所有数字都来自集合 {1,5,9} 。 1

我的方法 - 我试图生成来自集合 {1,9} 的所有数字。结果是 3^9(19683) 之后我正在检查它是否为素数。

我能以更好的时间复杂度来做这件事吗?

解决方法

  1. 永远不要生成一个大集合,之后检查集合的所有元素,排除大多数。这需要大量内存来存储您将要丢弃的东西。相反,找到一个带有“有效”数字的数字,检查素数,然后然后将它存储在一个集合中。与进行数学运算相比,在现代计算机上访问大量内存非常耗时。
  2. “我产生了所有的数字”:我希望你做得很聪明!例如,您永远不必检查最后一位数字为 5 的数字是否为素数(只有一个素数以 5 结尾;这就是 5 本身!),例如。此外,您希望不要只是“手动”构建所有数字组合。假设您找到一个数字 19551,那么 19559 也是一个候选数字,您永远不必手动“组合”数字来尝试最后一位数字。
  3. 当然,您的素数检查算法需要匹配您的问题类型:例如,您可以删除对 2 整除性的初始检查(您永远不会产生偶数)。您永远不需要检查是否可以被 5 整除,因为您从不使用 5 或 0 作为最后一位数字。根据您的素数检查算法,您还需要保存“杀死” xxxx1 的因素——这是您不必检查 xxxx9 的一个因素。根据您的号码中的 1,5 和 9 进行三因素检查;您可以直接推断出交叉和,从而推断出 3 整除性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。